public virtual Task <SourceResultDataContract> ExtractData(Guid sourceId)
 {
     return(Task.Run(() =>
     {
         var fileSource = Context.GetDataSource <FileDataSource>(sourceId);
         if ((fileSource == null) || (fileSource.InputStatus != SourceStatus.PendingExtraction))
         {
             return DataContractError(sourceId, DataSourceServiceResources.FileSourceIsNotPendingExtraction);
         }
         if (Context.SourceContainsErrors(sourceId))
         {
             return DataContractError(sourceId, DataSourceServiceResources.SourceContainsError);
         }
         var newFileName = streamManager.PrepareForExtraction(sourceId, fileSource.HandlerName, fileSource.CurrentFileName);
         fileSource.InputStatus = SourceStatus.Extracting;
         fileSource.CurrentFileName = newFileName;
         Context.UpdateDataSource(fileSource);
         return DataContractSuccess(sourceId);
     }));
 }