【发布时间】:2012-10-27 08:24:16
【问题描述】:
我基本上想知道在 C# 中我应该如何从通过 await 关键字等待的异步方法捕获异常。例如,考虑以下小型控制台程序,其中最重要的是包含一个名为 AwaitSync 的方法。 AwaitSync 调用 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 和异常处理非常有价值。
【问题讨论】:
-
你是说这行不通?
-
当我运行你的代码时,我看到“异常被捕获”。
-
它不会被我抓住。我再检查一下。
-
@jishi 查看我编辑的问题,它确实被抓住了。
-
@spender 你说得对,在我的情况下由于技术原因没有注意到它。
标签: c# .net asynchronous exception-handling async-await