public async Task <ISentJob> SendAsync(Action <string> log = null) { IBlobHelper storage; if (string.IsNullOrEmpty(StorageAccountConnectionString)) { storage = new ApiBlobHelper(HelixApi.Storage); } else { storage = new ConnectionStringBlobHelper(StorageAccountConnectionString); } IBlobContainer storageContainer = await storage.GetContainerAsync(TargetContainerName); var jobList = new List <JobListEntry>(); List <string> correlationPayloadUris = (await Task.WhenAll(CorrelationPayloads.Select(p => p.UploadAsync(storageContainer, log)))).ToList(); foreach (WorkItemDefinition workItem in _workItems) { JobListEntry entry = await workItem.SendAsync(storageContainer, TargetContainerName, log); entry.CorrelationPayloadUris = correlationPayloadUris; jobList.Add(entry); } string jobListJson = JsonConvert.SerializeObject(jobList); Uri jobListUri = await storageContainer.UploadTextAsync( jobListJson, $"job-list-{Guid.NewGuid()}.json"); string jobStartIdentifier = Guid.NewGuid().ToString("N"); JobCreationResult newJob = await HelixApi.RetryAsync( () => JobApi.NewAsync( new JobCreationRequest( Source, Type, Build, _properties.ToImmutableDictionary(), jobListUri.ToString(), TargetQueueId, storageContainer.Uri, storageContainer.ReadSas, storageContainer.WriteSas) { Creator = Creator, MaxRetryCount = MaxRetryCount ?? 0, JobStartIdentifier = jobStartIdentifier, }), ex => log?.Invoke($"Starting job failed with {ex}\nRetrying...")); return(new SentJob(JobApi, newJob)); }
public async Task <ISentJob> SendAsync() { IBlobHelper storage; if (string.IsNullOrEmpty(StorageAccountConnectionString)) { storage = new ApiBlobHelper(HelixApi.Storage); } else { storage = new ConnectionStringBlobHelper(StorageAccountConnectionString); } IBlobContainer storageContainer = await storage.GetContainerAsync(TargetContainerName); var jobList = new List <JobListEntry>(); List <string> correlationPayloadUris = (await Task.WhenAll(CorrelationPayloads.Select(p => p.UploadAsync(storageContainer)))).ToList(); foreach (WorkItemDefinition workItem in _workItems) { JobListEntry entry = await workItem.SendAsync(storageContainer, TargetContainerName); entry.CorrelationPayloadUris = correlationPayloadUris; jobList.Add(entry); } string jobListJson = JsonConvert.SerializeObject(jobList); Uri jobListUri = await storageContainer.UploadTextAsync( jobListJson, $"job-list-{Guid.NewGuid()}.json"); JobCreationResult newJob = await JobApi.NewOperationAsync( new JobCreationRequest( Source, Type, Build, _properties, jobListUri.ToString(), TargetQueueId, storageContainer.Uri, storageContainer.ReadSas, storageContainer.WriteSas, Creator)); return(new SentJob(JobApi, newJob)); }