c# - 尝试在 : await Task. 之外捕获 Run(()

标签 c# .net try-catch async-await

await Task.Run(() => 之外的 try catch 是否有意义,或者仅在 await 内部使用它们?

private async void Test()
{
     try
     {
         await Task.Run(() =>
         {
             try
             {
                  DoingSomething();
             }
             catch (Exception ex)
             {
                  log.Error(ex.Message);
             }
         });
      }
      catch (Exception ex)
      {
          log.Error(ex.Message);
      }
}

最佳答案

如果你处理 Exception在委托(delegate)内部(在您的情况下仅用于记录目的),await在正常情况下不会引发异常。这应该没问题。

private async Task Test()
{
         await Task.Run(() =>
         {
             try
             {
                  DoingSomething();
             }
             catch (Exception ex)
             {
                  log.Error(ex.Message);
             }
         });

}

但是,既然你是await正在 Task , 很可能会有一些 DoSomethingElseTest方法,这可能会受到 Task 的结果的影响- 在这种情况下,拥有一个 try/catch 也是有意义的周围await .

private async Task Test()
{
     try
     {
         await Task.Run(() =>
         {
             try
             {
                  DoingSomething();
             }
             catch (SomeSpecialException spex)
             {
                  // it is OK to have this exception
                  log.Error(ex.Message);
             }
         });

         DoSomethingElse(); // does not run when unexpected exception occurs.
      }
      catch (Exception ex)
      {
          // Here we are also running on captured SynchronizationContext
          // So, can update UI to show error ....
      }
}

关于c# - 尝试在 : await Task. 之外捕获 Run((),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17704102/

相关文章:

c# - 将 IsEnabled 和其他属性绑定(bind)到公共(public)属性,它是否像依赖属性一样工作?

javascript - 如果 Catch 没有运行,如何显示某些内容?

C# nbtstat 进程找不到指定的文件

c# - 在 C# 中从具有依赖接口(interface)的抽象类继承的正确方法

c# - 我应该始终断开 Dispose 方法中的事件处理程序吗?

.net - 多个部分意味着模型错误在表格之间流血

java - 为什么字符串输入作为 double 会输出这个答案

c# - finally block 中抛出异常后的返回值会怎样?

c# - 在组合框中对齐文本

c# - 泛型方法可以使用逆变/协变类型吗?