[英]Why does Task.WhenAll return void?
这是上图中的代码:
if (claims != null && claims.Any())
{
// firstly, why doesn't this work?
// var _claimResults = from claim in claims select UserManager.AddClaimAsync(user.Id, claim);
// but this does...
List<Task> _claimResults = new List<Task>();
foreach (var claim in claims)
{
_claimResults.Add(UserManager.AddClaimAsync(user.Id, claim));
}
// secondly, why does Task.WhenAll return void when it clearly says it returns Task?
Task claimsResult = await Task.WhenAll(_claimResults);
}
编辑: claims
是List<Claim>
,我认为是List<System.Security.Claim>
。
WhenAll
返回一个Task
,但是你正在等待那个任务。 等待一个普通的Task
(而不是Task<T>
)没有结果。 所以你要么:
Task claimsResult = Task.WhenAll(_claimResults);
要么
await Task.WhenAll(_claimResults);
我怀疑LINQ问题是因为你的foreach
方法立即实现了查询 - LINQ等价物将是:
var _claimsResults = claims.Select(claim => UserManager.AddClaimAsync(user.Id, claim))
.ToList();
... ToList()
方法立即实现结果。 (我使用了方法调用语法而不是查询表达式语法,因为对于像这样的简单查询,查询表达式毫无意义。)
不确定#1,但对于#2,因为你打电话等待它
它应该是
Task claimsResult = Task.WhenAll(_claimResults);
await claimsResult;
如果您不需要在其他地方延迟等待,则完全省略变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.