gpt4 book ai didi

c# - asp.net core 如何杀死一个线程

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:53 27 4
gpt4 key购买 nike

我正在使用 asp.net core 编写一个应用程序,我需要在其中创建一个新线程,因为我有一个始终运行的循环。在某些时候,我需要磨这个线程。在 asp.net 中,Thread.abort 是解决方案,但它在 asp.net core 中被删除了。对此的替代解决方案是什么?

最佳答案

不要为这样的事情创建自己的线程!

在 asp.core 中有一个使用长时间运行任务的内置方法。你应该阅读这个 here .

您应该创建一个派生自 BackgroundService 的类.使用此类是创建实现 IHostedService 的后台服务的最简单方法。 .然后您可以通过调用 services.AddHostedService<YourBackgroundService>() 将其添加到您的程序中在ConfigureServices方法。

注意:在我链接的页面中,他们使用 AddSingleton而不是 AddHostedService .在 .net core 2.1 及更高版本中,您应该使用 AddHostedService , 不是 AddSingleton (有一些异常(exception),但我们在这里谈论的是一般情况)。参见 this answer为什么会这样。

如果你像这样实现你的后台服务,附加线程的关闭将为你处理。在您执行 ExecuteAsync 时您只需要检查是否应该停止执行提供的 CancellationToken .您还应该使用 asnyc尽可能实现并提供 CancellationToken也有这样线程可以优雅地结束。 您永远不需要调用Thread.Abort甚至可以访问 Thread本身;这一切都在后台为您完成。

由于这不是对您提出的问题的直接回答,而是更正了您一开始可能做错了什么以进入这种情况,所以我首先想发表评论。然而,它太长了,有太多东西要提,这就是为什么我把它变成一个答案。

希望这对您有所帮助。

关于c# - asp.net core 如何杀死一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57325702/

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