合并 SubOrchestrator 函数的输出

Combine the outputs from SubOrchestrator Function

我有一个持久函数,它读取 AzureAD 组列表并从每个组中获取用户。这是代码:

指挥家:

        public async Task RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
        {
            var groups = await context.CallActivityAsync<List<AzureADGroup>>("GroupsReaderFunction"), null);
            if (groups != null && groups.Count > 0)
            {
                var processingTasks = new List<Task>();
                foreach (var group in groups)
                {
                    var processTask = context.CallSubOrchestratorAsync<List<AzureADUser>>("SubOrchestratorFunction", group });
                    processingTasks.Add(processTask);
                }
                await Task.WhenAll(processingTasks);                
            }
         }

副管弦乐队:

        public async Task<List<AzureADUser>> RunSubOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
        {            
            var request = context.GetInput<AzureADGroup>();
            var users = await context.CallActivityAsync<List<AzureADUser>>("UsersReaderFunction", request.objectId);
            return users;
         }

我需要将所有组中的所有用户放入一个列表 + 删除重复用户(如果有的话 - 因为有些用户可能存在于多个组中)和 运行 一些 activity 函数所有用户作为输入。我该怎么做?请告诉我。

尝试 Answers 中的代码时出错:

您的副指挥应该 return List<AzureADUser>

        public async Task<List<AzureADUser>> RunSubOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
        {            
            var request = context.GetInput<Group>();
            var users = await context.CallActivityAsync<List<AzureADUser>>("UsersReaderFunction", request.objectId);
            return users;
         }

然后您的编排器可以接收输出并将列表与

合并
        public async Task RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
        {
            var groups = await context.CallActivityAsync<List<AzureADGroup>>("GroupsReaderFunction"), null);
            if (groups != null && groups.Count > 0)
            {
                 var processingTasks = new List<Task<List<AzureADUser>>>();
                foreach (var group in groups)
                {
                    var processTask = context.CallSubOrchestratorAsync<List<AzureADUser>>("SubOrchestratorFunction", group);
                    processingTasks.Add(processTask);
                }
                await Task.WhenAll(processingTasks);
                var users = new List<AzureADUser>();
                foreach (var task in processingTasks)
                {
                    users.AddRange(await task);
                }
            }
         }

我不熟悉 AzureADUser,但如果您有 ID 或电子邮件,您可以使用它从列表中获取不同的用户。 例如

var distinctList = users.GroupBy(user => user.Id).Select(userGrp => userGrp.First()).ToList()