之间有什么区别
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);
}
}
我试过运行这两个例子。从表面上看,它们看起来表现相同。
一种方法比另一方更好吗?
答案 0 :(得分:2)
在这种情况下,它们是相同的。但是,如果您不拥有“PerformLongTask”的内部,则无法将其内容包装在try-catch中。此外,任务的状态将以这种方式设置为RanToCompletion,即使它引发了异常。如果你继续执行任务,则必须处理可能没有有效结果的前期任务。
我认为缺点是,在前一种情况下,您的异常处理逻辑包含在一个单独的任务中,与其他任务分离。