我基本上想知道如何在C#中通過await
關鍵字等待來自異步方法的異常。例如考慮下面的小控制檯程序,其中最重要的是包含一個名爲AwaitSync
的方法。 AwaitSync
調用TestAsync
,它返回執行時引發異常的任務。我試圖在AwaitAsync
,中發現異常,但未處理。如何在C#中捕獲正在等待的異步方法的異常?
class Program
{
static void Main(string[] args)
{
AwaitAsync();
Console.ReadKey();
}
static async Task AwaitAsync()
{
try
{
await TestAsync();
}
catch (Exception)
{
Console.WriteLine("Exception caught");
}
}
static Task TestAsync()
{
return Task.Factory.StartNew(() => { throw new Exception("Test"); });
}
}
我怎麼去捕左右從TestAsync
返回的任務異常?雖然這個例子是一個控制檯程序,但我的現實生活問題在ASP.NET MVC/Web API的上下文中。
編輯: 原來的異常被抓到,由於技術原因,我只是在終端關閉之前沒有注意到的「捕獲異常」消息。無論如何,Jon Skeet的回答對我對await
和異常處理的理解非常有價值。
你是說這不起作用? – jishi
當我運行你的代碼時,我看到「Exception caught」。 – spender
它不會被抓住。我會再檢查一次。 – aknuds1