如何在Parallel.Foreach中处理异常?

时间:2016-10-20 08:22:00

标签: c# .net exception-handling task-parallel-library

我的代码中有一个parallel.Foreach循环,我想知道如何处理异常。我应该在循环内捕获并处理(例如写入日志)异常,还是应该在外部捕获聚合异常 - 在try / catch中包含循环?

祝你好运

2 个答案:

答案 0 :(得分:13)

  

我应该捕获并处理循环内的异常,还是应该在

之外捕获聚合异常

这两者在功能上并不相同。两者都可以以不同的方式完成。

但更基本的问题是:当一个或多个迭代遭遇异常时,您是否希望处理剩余的项目?

如果是,则在循环内处理它们,可能像the MSDN example一样存储它们 如果没有,只需在Parallel循环本身周围放置一个try / catch。

答案 1 :(得分:0)

当您将自己的异常处理逻辑添加到并行循环中时,应捕获每个异常并将其保存到列表中(使用并发队列),因为每个循环都会创建不同的异常。因此,在循环存在之后,我们可以将列表中的所有异常包装在 System.AggregateException 中并抛出它。

MSDN Exaplanation and code example here -> How to: Handle Exceptions in Parallel Loops