gpt4 book ai didi

c# - Task.WhenAny 和未观察到的异常

转载 作者:IT王子 更新时间:2023-10-29 04:43:05 25 4
gpt4 key购买 nike

假设我有三个任务,abc。这三个都保证在 1 到 5 秒之间的随机时间抛出异常。然后我写了下面的代码:

await Task.WhenAny(a, b, c);

这最终会从最先出错的任务中抛出异常。因为这里没有 try...catch,所以这个异常会冒泡到我的代码中的其他地方。

当剩下的两个任务抛出异常时会发生什么?不就是这些未观察到的异常,会导致整个进程被kill掉吗?这是否意味着使用 WhenAny 的唯一方法是在 try...catch block 内,然后在继续之前以某种方式观察剩余的两个任务?

跟进:我希望答案适用于 .NET 4.5 .NET 4.0 以及 Async Targeting Pack(尽管显然使用 TaskEx.WhenAny 在这种情况下)。

最佳答案

What happens when the remaining two tasks throw an exception?

那些 Task 将在故障状态下完成。

Aren't these unobserved exceptions, which will cause the entire process to be killed?

不再是了。

在 .NET 4.0 中,Task 析构函数会将其未观察到的异常传递给 TaskScheduler.UnobservedTaskException ,如果未处理,将终止进程。

在 .NET 4.5 中,这个 behavior was changed .现在,未观察到的异常被传递给 TaskScheduler.UnobservedTaskException,但如果未处理,它们将被忽略。

关于c# - Task.WhenAny 和未观察到的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12678013/

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