合并 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()
我有一个持久函数,它读取 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()