[英]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
方法中拋出的異常按照設計存儲在返回的任務中。 要獲得例外,您可以:
await
任務: await t.Helper();
Wait
任務: t.Helper().Wait();
Exception
屬性: var task = t.Helper(); Log(task.Exception);
var task = t.Helper(); Log(task.Exception);
t.Helper().ContinueWith(t => Log(t.Exception), TaskContinuationOptions.OnlyOnFaulted);
你最好的選擇是第一個。 只需await
任務並處理異常(除非有特殊原因你不能這樣做)。 更多在.NET 4.5中的任務異常處理
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.