gpt4 book ai didi

.net - 程序终止后,Task.Run() 安排的工作会发生什么?

转载 作者:行者123 更新时间:2023-12-03 03:14:51 26 4
gpt4 key购买 nike

我正在使用 TPL 和 async/await 进行一些测试,并注意到一些意想不到的事情:例如,我正在安排工作以使用 lambda 和 Task.Run 运行:

Task.Run(()=>Console.WriteLine("Nice program"));

然后我意识到,如果程序立即返回,则工作永远不会执行。这是任何 .NET 应用程序(WPF、表单等)中的预期行为吗?有没有任何文档讨论这个问题?

这意味着 Task.Run 实际上不适合“即发即忘”场景。

最佳答案

This means that Task.Run is actually a no-go for fire-and-forget scenarios.

好吧,您不想忘记 - 您想等到它完成。因此,请使用返回给您的Task

为此,您需要跟踪以这种方式启动的所有未完成的任务,然后在非后台线程中使用类似 Task.WaitAll(tasks) 的内容。您可能不需要记住任务本身 - 您只需要有一个计数器,该计数器在每个任务完成时递减,然后您只需等待它变为零。

老实说,在不了解更多情况的情况下,很难给出比这更具体的建议......但类似的东西肯定会起作用。

当然,您可以轻松地将其封装在您自己的便捷方法中。

关于.net - 程序终止后,Task.Run() 安排的工作会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14346108/

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