【发布时间】:2016-08-16 17:36:02
【问题描述】:
我有一个List<System.Security.Claim> 列表,我想异步添加每个声明。我很好奇如何运行所有任务并设置boolean 以供以后使用以确保所有任务都已运行。
foreach (var claim in claims)
{
claimTasks.Add(UserManager.AddClaimAsync(user.Id, claim));
}
claimResultSucceeded = Task.WhenAll(claimTasks).IsCompleted;
我也试过这个:
foreach (var claim in claims)
{
claimTasks.Add(Task.Run(() => UserManager.AddClaimAsync(user.Id, claim)));
}
claimResultSucceeded = Task.WhenAll(claimTasks).IsCompleted;
编辑:如下图所示,任务处于故障状态:
{"第二个操作在前一个上下文之前开始 异步 操作完成。使用“等待”确保任何异步操作 在此上下文中调用另一个方法之前已完成。任何实例 成员不能保证是线程安全的。"}
【问题讨论】:
-
您希望
.IsCompleted做什么?请说明您希望您的代码做什么以及您观察到它做什么。 -
@LasseV.Karlsen .IsCompleted 应该在所有任务都执行后包含 true 或 false 的结果。我用更多细节更新了问题。
-
@user1477388 不,它返回任务当前是否已完成,并立即返回。
-
@Servy,然后根据 Mike 在下面的回答,我如何检查所有任务是否已成功完成?
-
基本上:
await Task.WhenAll(claimTasks);.
标签: c# asp.net-mvc task