public static async Task <List <string> > RunOrchestrator( [OrchestrationTrigger] DurableOrchestrationContext context) { var outputs = new List <string>(); // Run the worker CLI tasks in parallel var workerCliTasks = new List <Task <DevOpsBuild> >(); foreach (var workerCliContext in ContextProvider.GetWorkerCliBuildContexts()) { Task <DevOpsBuild> workerCliBuild = context.CallSubOrchestratorAsync <DevOpsBuild>("BuildManager_OrchestrateBuild", workerCliContext); workerCliTasks.Add(workerCliBuild); } var workerCliBuilds = await Task.WhenAll(workerCliTasks); outputs.AddRange(workerCliBuilds.Select(b => b.Url)); // Get the platform main setup ready var setupTasks = new List <Task <DevOpsBuild> >(); foreach (var setupContext in ContextProvider.GetSetupBuildContexts()) { Task <DevOpsBuild> setupBuild = context.CallSubOrchestratorAsync <DevOpsBuild>("BuildManager_OrchestrateBuild", setupContext); setupTasks.Add(setupBuild); } var setupBuilds = await Task.WhenAll(setupTasks); outputs.AddRange(setupBuilds.Select(b => b.Url)); // Run the worker Site tasks in parallel var workerSiteTasks = new List <Task <DevOpsBuild> >(); foreach (var workerSiteContext in ContextProvider.GetWorkerSiteBuildContexts()) { Task <DevOpsBuild> workerSiteBuild = context.CallSubOrchestratorAsync <DevOpsBuild>("BuildManager_OrchestrateBuild", workerSiteContext); workerSiteTasks.Add(workerSiteBuild); } var workerSiteBuilds = await Task.WhenAll(workerSiteTasks); outputs.AddRange(workerSiteBuilds.Select(b => b.Url)); return(outputs); }