提问者:小点点

为什么不等待的异步方法不抛出异常?


我认为异步方法应该像普通方法一样,直到它们到达等待状态。

为什么这不会引发异常?

有没有一种方法可以在不等待的情况下引发异常?

using System;
using System.Threading.Tasks;

public class Test
{
    public static void Main()
    {
        var t = new Test();
        t.Helper();
    }

    public async Task Helper()
    {
        throw new Exception();
    }
}

共1个答案

匿名用户

按照设计,在async方法中引发的异常存储在返回的任务中。要获得异常,您可以:

  1. Await任务:Await t.Helper();
  2. wait任务:t.helper().wait();
  3. 在任务完成后检查任务的exception属性:var task=t.helper();日志(Task.Exception);
  4. 向处理异常任务添加一个continuation:t.Helper().ContinueWith(t=>Log(t.Exception),TaskContinuationOptions.OnlyOnFaulted);

你最好的选择是第一个。只需await任务并处理异常(除非有特定原因不能这样做)。NET 4.5中任务异常处理的更多信息

相关问题