【发布时间】:2018-12-17 14:43:34
【问题描述】:
我可以将 Task.WhenAll() 结果设置为 Task.WhenAll() 例程中的值吗?例如,以下代码将获取 appRoleMaps 中所有域/组组合的所有授权用户:
var results = await Task.WhenAll(appRoleMaps.Select(
x => GetAuthorizedUsers(x.DomainName, x.ADGroupName)));
但是如果我想将每次迭代的授权用户结果设置为迭代项Authorized属性值呢?例如,类似下面的代码(虽然下面的代码不起作用):
var results = await Task.WhenAll(appRoleMaps.Select(
x => x.AuthorizedUsers = GetAuthorizedUsers(x.DomainName, x.ADGroupName)));
有没有一种简化的方法来做到这一点?原因是,GetAuthorizedUsers 结果集不包括域/组信息,所以我不能只做一个简单的 foreach/where 最后通过此信息轻松加入
【问题讨论】:
-
你能修改
GetAuthorizedUsers()吗,如果是这样,让它创建包含域和组名的新对象。 -
是的,我可以实现其他代码结构和解决方法,但我希望有一种更直接的方法来在 Task.WhenAll() 中设置这个值,这是我原来帖子的重点
-
WhenAll在这里如何应用?appRoleMaps.Select是否解析为任务列表? -
@dlatikay 我通过 Select 根据每个 appRoleMap 的域名/组名选择授权用户
-
啊,是的,现在我明白了,由于 lambda 中的分配不再等待,因此不适用于
WhenAll。也许尝试使 lambda 表达式本身异步?
标签: c# .net parallel-processing async-await