有什么区别
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,即使它引发了异常.如果您继续完成任务,则必须处理可能没有有效结果的前期任务.
我认为缺点是在前一种情况下,您的异常处理逻辑包含在一个单独的任务中,与其他任务分离.