public async Task RunAsync() { Console.WriteLine("JobManager for account: {0}, job: {1} has started...", this.accountName, this.jobId); Console.WriteLine(); Console.WriteLine("JobManager running with the following settings: "); Console.WriteLine("----------------------------------------"); Console.WriteLine(this.configurationSettings.ToString()); BatchSharedKeyCredentials credentials = new BatchSharedKeyCredentials( this.configurationSettings.BatchAccountUrl, this.configurationSettings.BatchAccountName, this.configurationSettings.BatchAccountKey); CloudStorageAccount storageAccount = new CloudStorageAccount( new StorageCredentials( this.configurationSettings.StorageAccountName, this.configurationSettings.StorageAccountKey), new Uri(this.configurationSettings.StorageBlobEndpoint), null, null, null); using (BatchClient batchClient = await BatchClient.OpenAsync(credentials)) { HashSet <string> blobContainerNames = new HashSet <string>(); try { // Submit some tasks blobContainerNames = await this.SubmitTasks(batchClient); // Wait for the tasks to finish List <CloudTask> tasks = await batchClient.JobOperations.ListTasks(jobId).ToListAsync(); // don't wait for the job manager task since it won't finish until this method exists tasks.RemoveAll(t => t.Id.Equals(this.taskId, StringComparison.CurrentCultureIgnoreCase)); await GettingStartedCommon.WaitForTasksAndPrintOutputAsync(batchClient, tasks, TimeSpan.FromMinutes(10)); } finally { // Clean up the files for the tasks SampleHelpers.DeleteContainersAsync(storageAccount, blobContainerNames).Wait(); } } }
/// <summary> /// Populates Azure Storage with the required files, and /// submits the job to the Azure Batch service. /// </summary> public async Task RunAsync() { Console.WriteLine("Running with the following settings: "); Console.WriteLine("-------------------------------------"); Console.WriteLine(this.poolsAndResourceFileSettings.ToString()); Console.WriteLine(this.accountSettings.ToString()); // Set up the Batch Service credentials used to authenticate with the Batch Service. BatchSharedKeyCredentials credentials = new BatchSharedKeyCredentials( this.accountSettings.BatchServiceUrl, this.accountSettings.BatchAccountName, this.accountSettings.BatchAccountKey); // Delete the blob containers which contain the task input files since we no longer need them CloudStorageAccount cloudStorageAccount = new CloudStorageAccount( new StorageCredentials(this.accountSettings.StorageAccountName, this.accountSettings.StorageAccountKey), this.accountSettings.StorageServiceUrl, useHttps: true); // Get an instance of the BatchClient for a given Azure Batch account. using (BatchClient batchClient = await BatchClient.OpenAsync(credentials)) { // add a retry policy. The built-in policies are No Retry (default), Linear Retry, and Exponential Retry batchClient.CustomBehaviors.Add(RetryPolicyProvider.LinearRetryProvider(TimeSpan.FromSeconds(10), 3)); string jobId = null; // Track the containers which are created as part of job submission so that we can clean them up later. HashSet <string> blobContainerNames = new HashSet <string>(); try { // Allocate a pool await this.CreatePoolIfNotExistAsync(batchClient, cloudStorageAccount); // Submit the job jobId = GettingStartedCommon.CreateJobId("SimpleJob"); blobContainerNames = await this.SubmitJobAsync(batchClient, cloudStorageAccount, jobId); // Print out the status of the pools/jobs under this account await GettingStartedCommon.PrintJobsAsync(batchClient); await GettingStartedCommon.PrintPoolsAsync(batchClient); // Wait for the job to complete List <CloudTask> tasks = await batchClient.JobOperations.ListTasks(jobId).ToListAsync(); await GettingStartedCommon.WaitForTasksAndPrintOutputAsync(batchClient, tasks, TimeSpan.FromMinutes(10)); } finally { // Delete the pool (if configured) and job // TODO: In C# 6 we can await here instead of .Wait() // Delete Azure Storage container data SampleHelpers.DeleteContainersAsync(cloudStorageAccount, blobContainerNames).Wait(); // Delete Azure Batch resources List <string> jobIdsToDelete = new List <string>(); List <string> poolIdsToDelete = new List <string>(); if (this.poolsAndResourceFileSettings.ShouldDeleteJob) { jobIdsToDelete.Add(jobId); } if (this.poolsAndResourceFileSettings.ShouldDeletePool) { poolIdsToDelete.Add(this.poolsAndResourceFileSettings.PoolId); } SampleHelpers.DeleteBatchResourcesAsync(batchClient, jobIdsToDelete, poolIdsToDelete).Wait(); } } }