Dan*_*Dan 3 c# exception console-application async-await
我有一个.NET Core控制台应用程序。永远不会引发嵌套异步/等待中发生的异常:
static async Task Main(string[] args)
{
try
{
var f = new TaskFactory(TaskScheduler.Current);
await f.StartNew(async () =>
{
var x = 0;
if (x == 0)
throw new Exception("we have a problem");
await Task.Delay(1);
});
}
catch(Exception)
{
// never reaches here
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除inner async
并将其调用删除await Task.Delay(1)
,则会捕获到异常。
那是一个经典的陷阱。TaskFactory
期望a Func<T>
并返回a Task<T>
。在您的情况下,T
is Task
,因此您最终得到a,Task<Task>
并且需要等待内部和外部任务。使用Unwrap
此:
await f.StartNew(async () =>
{
var x = 0;
if (x == 0)
throw new Exception("we have a problem");
await Task.Delay(1);
}).Unwrap();
Run Code Online (Sandbox Code Playgroud)