c# – TaskContinuationOptions.OnlyOnFaulted vs try catch

有什么区别

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

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

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

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

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

点赞