如何杀死asp.net core中的线程

The*_*rIV 1 c# multithreading .net-core asp.net-core

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

Joe*_*ius 5

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

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

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

注意:在我链接的页面中,他们使用AddSingleton而不是AddHostedService. 在 .net core 2.1 及更高版本中,您应该使用AddHostedService, not AddSingleton(有一些例外,但我们在这里讨论一般情况)。请参阅此答案了解原因。

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

由于这不是对您提出的问题的直接答案,而是更多地纠正您首先可能做错的事情而陷入这种情况,因此我首先想发表评论。然而,它太长了,有太多的事情要提及,这就是我将其作为答案的原因。

希望这可以帮助。