gpt4 book ai didi

.net - 我可以在 Task.Run 中创建一个异常(exception)使程序崩溃吗?

转载 作者:行者123 更新时间:2023-12-04 20:46:56 25 4
gpt4 key购买 nike

我不是悄悄吞下异常的忠实粉丝,但以下代码正是这样做的:

Task.Run(() =>
{
var obj = DoSomethingCpuIntensive(); // returns null, due to a bug
obj.DoMoreStuff();
Console.WriteLine("after"); // never get here; program continues running
});

我读过 ThrowUnobservedTaskExceptions配置值,但这无济于事,因为我从未对 Task 做任何事情返回(编辑:实际上它确实有帮助,但仅在发布版本中)。

有没有办法让未处理的异常使程序崩溃?我在用 Task.Run以某种方式我不应该?

最佳答案

我强烈建议您使用 Task.RunThreadPool.QueueUserWorkItem .

首先,退一步。 DoSomethingCpuIntensive的目的是什么? ?如果您正在计算某个值,我建议您返回它,这样您就有了 Task<T>而不是 Task .例如,(假设 DoMoreStuff 不是 CPU 密集型的):

async Task DoWorkAsync()
{
var obj = await Task.Run(() => DoSomethingCpuIntensive());
obj.DoMoreStuff();
}

我试图理解的想法是,您的代码应该关心后台操作的结果,即使“结果”只是“成功”或“异常”。这样你的代码就更干净了。否则,您将拥有一个半独立的系统,您只能通过检测应用程序状态的变化来做出响应。乱多了。

也就是说,如果您确实想要拥有半独立系统,并且希望它在失败时使您的进程崩溃,那么 ThrowUnobservedTaskExceptions正是你想要的。我不知道为什么你认为它没有帮助。

关于.net - 我可以在 Task.Run 中创建一个异常(exception)使程序崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16212769/

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