我的代码中有一个parallel.Foreach循环,我想知道如何处理异常。我应该在循环内捕获并处理(例如写入日志)异常,还是应该在外部捕获聚合异常 - 在try / catch中包含循环?
祝你好运
答案 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