我基本上想知道在 C# 中我应该如何从通过await
关键字等待的异步方法中捕获异常。例如,考虑以下小型控制台程序,其中最重要的是包含一个名为AwaitSync
. AwaitSync
calls TestAsync
,它返回一个 Task ,执行时会引发异常。我试图在 中捕获异常AwaitAsync
,但它没有得到处理。
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
和异常处理非常有价值。