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>。在您的情况下,Tis 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)
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |