c# - Try/Catch block 中的非等待任务会发生什么

标签 c# async-await

当方法返回包含在 try/catch block 中的 Task 时会发生什么?如果未等待的 Task 抛出异常,是否捕获/处理了异常?

例如,如果 DoSomethingAsync() 抛出异常,我可以在 TryCatchMethod()try/catch block 中处理它吗?

Task TryCatchMethod()
{
    try
    {
        return DoSomethingAsync();
    }
    catch(Exception e)
    {
        //Handle Exception
    }
}

async Task DoSomethingAsync()
{
   await Task.Delay(10000);
   throw new System.Exception();
}

最佳答案

如果 DoSomethingAsync 抛出异常,则捕获该异常。如果它返回一个错误的任务,而不是抛出异常,那么在您尝试获取任务结果(通过等待)之前,没有异常可以捕获。由于您没有在 try block 中执行此操作,因此它不会运行您的 catch block 。

请注意,如果该方法被标记为 async,则该方法主体中抛出的任何异常都会被捕获并导致该方法返回错误任务,而不是该方法抛出异常。对于抛出异常的方法,该方法需要返回一个 Task 而不被标记为 async

关于c# - Try/Catch block 中的非等待任务会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47316145/

相关文章:

c# - 当 Url 为 ASPX 页面时,HttpContext.Current.Request.Url.IsFile 返回 False

c# - 如何跟踪 Entity Framework Core 事件以进行集成测试?

c# - 将 AjaxOnlyAttribute 和 ChildActionOnlyAttribute 合并到一个 Action 过滤器中

C# 与任务异步比同步慢

c# - C# 中的 Async 和 Await 以及问题

c# - 在 C# 中通过 UInt32 访问内存

c# - 根据 c# 中的窗口大小调整框

c# - 在可移植类库中使用 await HttpClient.GetAsync 的异常

javascript - 异步等待未按预期工作

android - Kotlin-将ksoap2作为协程vs异步运行-哪个更好?