コード例 #1
0
        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());
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }