use*_*388 2 c# linq asp.net-mvc task
这是上图中的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
编辑: claims是List<Claim>,我认为是List<System.Security.Claim>.
WhenAll返回a Task,但是你正在等待那个任务.等待平原Task(而不是a Task<T>)没有结果.所以你要么:
Task claimsResult = Task.WhenAll(_claimResults);
Run Code Online (Sandbox Code Playgroud)
要么
await Task.WhenAll(_claimResults);
Run Code Online (Sandbox Code Playgroud)
我怀疑LINQ问题是因为你的foreach方法立即实现了查询 - LINQ等价物将是:
var _claimsResults = claims.Select(claim => UserManager.AddClaimAsync(user.Id, claim))
.ToList();
Run Code Online (Sandbox Code Playgroud)
... ToList()方法立即实现结果.(我使用了方法调用语法而不是查询表达式语法,因为对于像这样的简单查询,查询表达式毫无意义.)
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |