TaskContinuationOptions.OnlyOnFaulted vs try catch

时间:2013-07-19 08:17:29

标签: c# .net logging try-catch task-parallel-library

之间有什么区别
var task3 = Task.Run(() => PerformLongTask()).ContinueWith(t => Log.Error(t.Exception), TaskContinuationOptions.OnlyOnFaulted);

var task3 = Task.Run(() => PerformLongTask());

private void PerformLongTask()
{
  try
  {
  //......
  }
  catch (Exception ex)
  {
     Log.Error(ex);
  }
}

我试过运行这两个例子。从表面上看,它们看起来表现相同。

一种方法比另一方更好吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下,它们是相同的。但是,如果您不拥有“PerformLongTask”的内部,则无法将其内容包装在try-catch中。此外,任务的状态将以​​这种方式设置为RanToCompletion,即使它引发了异常。如果你继续执行任务,则必须处理可能没有有效结果的前期任务。

我认为缺点是,在前一种情况下,您的异常处理逻辑包含在一个单独的任务中,与其他任务分离。