public async Task <JobInfoResult> CreateJobAsync(string objectName, BulkConstants.OperationType operationType) { if (string.IsNullOrEmpty(objectName)) { throw new ArgumentNullException(nameof(objectName)); } var jobInfo = new JobInfo { ContentType = "XML", Object = objectName, Operation = operationType.Value() }; const string resourceName = "/services/async/{0}/job"; return(await XmlHttpClient.HttpPostAsync <JobInfoResult>(jobInfo, resourceName) .ConfigureAwait(false) ?? new JobInfoResult()); }
public async Task <IList <BatchResultList> > RunJobAndPollAsync <T>(string objectName, BulkConstants.OperationType operationType, IEnumerable <ISObjectList <T> > recordsLists) { const float pollingStart = 1000; const float pollingIncrease = 2.0f; var batchInfoResults = await RunJobAsync(objectName, operationType, recordsLists) .ConfigureAwait(false); var currentPoll = pollingStart; var finishedBatchInfoResults = new List <BatchInfoResult>(); while (batchInfoResults.Count > 0) { var removeList = new List <BatchInfoResult>(); foreach (var batchInfoResult in batchInfoResults) { var batchInfoResultNew = await PollBatchAsync(batchInfoResult) .ConfigureAwait(false); if (batchInfoResultNew.State == null || !batchInfoResultNew.State.Equals(BulkConstants.BatchState.Completed.Value()) && !batchInfoResultNew.State.Equals(BulkConstants.BatchState.Failed.Value()) && !batchInfoResultNew.State.Equals(BulkConstants.BatchState.NotProcessed.Value())) { continue; } finishedBatchInfoResults.Add(batchInfoResultNew); removeList.Add(batchInfoResult); } foreach (var removeItem in removeList) { batchInfoResults.Remove(removeItem); } await Task.Delay((int)currentPoll) .ConfigureAwait(false); currentPoll *= pollingIncrease; } var batchResults = new List <BatchResultList>(); foreach (var batchInfoResultComplete in finishedBatchInfoResults) { batchResults.Add(await GetBatchResultAsync(batchInfoResultComplete) .ConfigureAwait(false)); } return(batchResults); }
public async Task <IList <BatchInfoResult> > RunJobAsync <T>(string objectName, BulkConstants.OperationType operationType, IEnumerable <ISObjectList <T> > recordsLists) { if (recordsLists == null) { throw new ArgumentNullException(nameof(recordsLists)); } var jobInfoResult = await CreateJobAsync(objectName, operationType) .ConfigureAwait(false); var batchResults = new List <BatchInfoResult>(); foreach (var recordList in recordsLists) { batchResults.Add(await CreateJobBatchAsync(jobInfoResult, recordList) .ConfigureAwait(false)); } await CloseJobAsync(jobInfoResult) .ConfigureAwait(false); return(batchResults); }