gpt4 book ai didi

c# - 为什么 Task.WhenAll 返回无效?

转载 作者:行者123 更新时间:2023-11-30 19:04:48 26 4
gpt4 key购买 nike

enter image description here

这是上图中的代码:

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);
}
  1. 为什么 LINQ 表达式不起作用,而 foreach 却起作用。 LINQ 表达式在执行时出现“底层提供程序无法打开”异常。
  2. 为什么 Task.WhenAll() 说它的返回类型是 Task 时返回 void?

编辑: claimsList<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() 在哪里方法立即具体化结果。 (我使用了方法调用语法而不是查询表达式语法,因为查询表达式对于像这样的琐碎查询来说毫无意义。)

关于c# - 为什么 Task.WhenAll 返回无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38978057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com