Parallel.Foreach异常和取消

19

我试图了解Parallel.Foreach中异常和取消操作的处理方式。所有示例似乎都涉及到任务。

Parallel.Foreach中发生异常会怎样?

  • 我是否需要在try/catch块中包含整个循环(使用AggregateException)?
  • 在异常被捕获之前,循环中的所有其他任务,即使是未启动的任务,是否都会运行至结束?

对于CancellationToken,同样有这些问题。

1个回答

17
简言之,每个循环中的异常都会被聚合并呈现在AggregateException下。每当出现异常时,已启动的循环将允许完成,但不会启动更多的循环。 ForEach确实有许多重载,允许使用本地init和finally块,并且body动作还采用ParallelLoopState,循环体代码可以使用它来检查另一个循环中是否发生异常,然后自行协作性地中断。

请参见此文章以获取更多信息。


链接已损坏。 - Bernard Borg
@BernardBorg,链接已修复。 - VinayC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接