我认为异步方法应该像普通方法一样,直到它们到达等待。
为什么这不会引发异常?
有没有办法在没有等待的情况下抛出异常?
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();
}
}
答案 0 :(得分:16)
根据设计,async
方法中抛出的异常存储在返回的任务中。要获得例外,您可以:
await
任务:await t.Helper();
Wait
任务:t.Helper().Wait();
Exception
属性:var task = t.Helper(); Log(task.Exception);
t.Helper().ContinueWith(t => Log(t.Exception), TaskContinuationOptions.OnlyOnFaulted);
你最好的选择是第一个。只需await
任务并处理异常(除非有特定原因,您无法执行此操作)。更多Task Exception Handling in .NET 4.5