private static void AddWork(IBatchClient client) { using (IWorkItemManager wm = client.OpenWorkItemManager()) { //The toolbox contains some helper mechanisms to ease submission and monitoring of tasks. IToolbox toolbox = client.OpenToolbox(); // to submit a batch of tasks, the TaskSubmissionHelper is useful. ITaskSubmissionHelper taskSubmissionHelper = toolbox.CreateTaskSubmissionHelper(wm, Program.PoolName); // workitem is uniquely identified by its name so we will use a timestamp as suffix taskSubmissionHelper.WorkItemName = Environment.GetEnvironmentVariable("USERNAME") + DateTime.Now.ToString("yyyyMMdd-HHmmss"); Console.WriteLine("Creating work item: {0}", taskSubmissionHelper.WorkItemName); // add 2 quick tasks. Tasks within a job must have unique names taskSubmissionHelper.AddTask(new CloudTask("task1", "hostname")); taskSubmissionHelper.AddTask(new CloudTask("task2", "cmd /c dir /s")); //Commit the tasks to the Batch Service IJobCommitUnboundArtifacts artifacts = taskSubmissionHelper.Commit() as IJobCommitUnboundArtifacts; // TaskSubmissionHelper commit artifacts returns the workitem and job name ICloudJob job = wm.GetJob(artifacts.WorkItemName, artifacts.JobName); Console.WriteLine("Waiting for all tasks to complete on work item: {0}, Job: {1} ...", artifacts.WorkItemName, artifacts.JobName); //We use the task state monitor to monitor the state of our tasks -- in this case we will wait for them all to complete. ITaskStateMonitor taskStateMonitor = toolbox.CreateTaskStateMonitor(); // blocking wait on the list of tasks until all tasks reach completed state bool timedOut = taskStateMonitor.WaitAll(job.ListTasks(), TaskState.Completed, new TimeSpan(0, 20, 0)); if (timedOut) { throw new TimeoutException("Timed out waiting for tasks"); } // dump task output foreach (var t in job.ListTasks()) { Console.WriteLine("Task " + t.Name + " says:\n" + t.GetTaskFile(Constants.StandardOutFileName).ReadAsString()); } // remember to delete the workitem before exiting Console.WriteLine("Deleting work item: {0}", artifacts.WorkItemName); wm.DeleteWorkItem(artifacts.WorkItemName); } }
/// <summary> /// Waits for the specified task to complete /// </summary> public static void WaitForTaskCompletion(BatchController controller, BatchAccountContext context, string workItemName, string jobName, string taskName) { YieldInjectionInterceptor interceptor = CreateHttpRecordingInterceptor(); BatchClientBehavior[] behaviors = new BatchClientBehavior[] { interceptor }; BatchClient client = new BatchClient(controller.BatchManagementClient, controller.ResourceManagementClient); ListTaskOptions options = new ListTaskOptions(context, workItemName, jobName, null, behaviors) { TaskName = taskName }; IEnumerable <PSCloudTask> tasks = client.ListTasks(options); ITaskStateMonitor monitor = context.BatchOMClient.OpenToolbox().CreateTaskStateMonitor(); monitor.WaitAll(tasks.Select(t => t.omObject), TaskState.Completed, TimeSpan.FromMinutes(2), null, behaviors); }