有什么区别
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 中。此外,任务的 Status 将以这种方式设置为 RanToCompletion,即使它抛出异常也是如此。如果您有任务的延续,它将不得不处理可能没有有效结果的先前任务。
我想缺点是在前一种情况下,您的异常处理逻辑包含在一个单独的任务中,与其余部分分离。
关于c# - TaskContinuationOptions.OnlyOnFaulted 与 try catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741268/