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); })); }