4

有什么区别

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);
  }
}

我尝试运行这两个示例。从表面上看,它们的行为似乎相同。

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

4

1 回答 1

2

在这种情况下,它们是相同的。但是,如果您不拥有“PerformLongTask”的内部结构,您也不能将其内容包装在 try-catch 中。此外,即使它抛出异常,任务的状态也会以这种方式设置为 RanToCompletion。如果您有任务的延续,它将不得不处理可能没有有效结果的先前任务。

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

于 2013-07-25T14:25:57.607 回答