c# - 合并来自 SubOrchestrator 函数的输出
问题描述
我有一个持久函数,它读取 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;
}
我需要将所有组中的所有用户放到一个列表中 + 删除重复的用户(如果有的话 - 因为某些用户可能存在于多个组中)并以所有用户作为输入运行一些活动功能。我该怎么做?请告诉我。
试用 Answers 中的代码时出错:
解决方案
您的子协调员应该返回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()
推荐阅读
- javascript - 使用依赖注入传递参数
- vba - 如何在 VBA 代码运行时禁用功能区
- jira - 使用 JIRA ''获取更新的工作日志的 ID'' REST api 时如何获取扩展属性?
- ios - 如何将 Firebase 数据的节点放置在数组中
- windows - Windows 10 上的 GPU 计算集群比 Ubuntu 18.04 更快
- java - BasicTabbedPaneUI 聚焦时显示边框
- angular - 如何在 ion-item 中使用 *ngFor 以便每个都有单独的功能
- sql - 如何为 postgresql 中的特定部分设置条件?
- excel - Excel VBA 数据透视表筛选器
- php - 在 XML 和 PHP cURL 应用程序中的 POST 后隐藏确认标头