繁体   English   中英

为什么unawaited异步方法不会抛出异常?

[英]Why do unawaited async methods not throw exceptions?

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

为什么这不会抛出异常?

有没有办法在没有等待的情况下抛出异常?

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();
    }
}

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

  1. await任务: await t.Helper();
  2. Wait任务: t.Helper().Wait();
  3. 任务完成检查任务的Exception属性: var task = t.Helper(); Log(task.Exception); var task = t.Helper(); Log(task.Exception);
  4. 为处理异常的任务添加一个延续: t.Helper().ContinueWith(t => Log(t.Exception), TaskContinuationOptions.OnlyOnFaulted);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM