【问题标题】:How to handle exceptions in Parallel.ForEach?如何处理 Parallel.ForEach 中的异常?
【发布时间】:2017-03-02 03:21:55
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

我应该在循环内部捕获和处理异常还是应该在外部捕获聚合异常

这两者在功能上并不等同。两者都可以,效果不同。

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

如果是,则在循环内处理它们,可能将它们存储在 the MSDN example 中。
如果不是,那么只需在 Parallel 循环本身周围放置一个 try/catch。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多