{ throw new Exception(); }); -6ren">
gpt4 book ai didi

c# - 在任务中抛出异常 - "await"vs Wait()

转载 作者:IT王子 更新时间:2023-10-29 04:44:31 24 4
gpt4 key购买 nike

static async void Main(string[] args)
{
Task t = new Task(() => { throw new Exception(); });

try
{
t.Start();
t.Wait();
}
catch (AggregateException e)
{
// When waiting on the task, an AggregateException is thrown.
}

try
{
t.Start();
await t;
}
catch (Exception e)
{
// When awating on the task, the exception itself is thrown.
// in this case a regular Exception.
}
}

在 TPL 中,当在 Task 中抛出异常时,它会被 AggregateException 包裹。
但是当使用 await 关键字时,情况就不会发生了。
对这种行为的解释是什么?

最佳答案

目标是让它看起来/表现得像同步版本。 Jon Skeet 在他的 Eduasync 系列中对此做了很好的解释,特别是这篇文章:

http://codeblog.jonskeet.uk/2011/06/22/eduasync-part-11-more-sophisticated-but-lossy-exception-handling/

关于c# - 在任务中抛出异常 - "await"vs Wait(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7340309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com