c# - TaskContinuationOptions.OnlyOnFaulted 与 try catch

标签 c# .net logging try-catch task-parallel-library

有什么区别

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/

相关文章:

Azure Application Insights 控制台日志格式

c# - 无论如何,我可以将两个值绑定(bind)到我的 XAML 中吗?

c# - 如何将 SelectedListViewItemCollection 转换为 ListViewItemCollection

.net - ASP.NET 将 CORS header 添加到 ashx 文件处理程序

c# - 如何将 asp.net "Login" View 放在布局页面上,而不是 @Html.Actionlink 到单独的登录页面?

java - 如何每天创建新文件夹并在 slf4j 日志中创建文件

c# - 如何将字符串拆分为字典<string,string>

c# - 应用内购买时出现 android.app.Service 连接泄漏错误

.net - OPC UA 服务器 .Net 标准

nginx - 如何读取nginx access.log?