Exemplo n.º 1
0
        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);
        }