【发布时间】:2018-07-09 11:37:52
【问题描述】:
我正在尝试关注以下网址中的内容Async and Await with For Loop
但是,如果其中任何一个任务失败,我需要做的一件事是终止所有任务。 在给定的 LoadAsync 方法中如何做到这一点。
【问题讨论】:
标签: c# asynchronous async-await task c#-5.0
我正在尝试关注以下网址中的内容Async and Await with For Loop
但是,如果其中任何一个任务失败,我需要做的一件事是终止所有任务。 在给定的 LoadAsync 方法中如何做到这一点。
【问题讨论】:
标签: c# asynchronous async-await task c#-5.0
这个答案根本不起作用,因为Parallel 不支持异步。 Parallel lambda 将简单地立即返回并生成任务。 没有等待该任务。它被扔掉了。因此,循环将在开始所有工作后立即退出,而不是等待任何工作完成。
您可以通过首先创建CancellationTokenSource 并将其Token 属性传递给您要取消的所有代码来实现取消。代码本身必须传递该令牌或定期检查该令牌。
当您调用Cancel() 方法时,所有活动都会收到取消并结束的信号。
您可以使用https://blogs.msdn.microsoft.com/pfxteam/2012/03/05/implementing-a-simple-foreachasync-part-2/ 实现循环:
public static Task ForEachAsync<T>(this IEnumerable<T> source, int dop, Func<T, Task> body)
{
return Task.WhenAll(
from partition in Partitioner.Create(source).GetPartitions(dop)
select Task.Run(async delegate {
using (partition)
while (partition.MoveNext())
await body(partition.Current);
}));
}
【讨论】: