The*_*rIV 1 c# multithreading .net-core asp.net-core
我正在使用 asp.net core 编写一个应用程序,其中我需要创建一个新线程,因为我有一个始终运行的循环。在某些时候,我需要铣削这条线。在asp.net中,Thread.abort是解决方案,但在asp.net core中被删除。有什么替代解决方案吗?
asp.core 中有一个使用长时间运行任务的内置方法。您应该在这里阅读相关内容。
您应该创建一个派生自 的类BackgroundService
。使用此类是创建实现IHostedService
. 然后,您可以通过调用services.AddHostedService<YourBackgroundService>()
该ConfigureServices
方法将其添加到您的程序中。
注意:在我链接的页面中,他们使用AddSingleton
而不是AddHostedService
. 在 .net core 2.1 及更高版本中,您应该使用AddHostedService
, not AddSingleton
(有一些例外,但我们在这里讨论一般情况)。请参阅此答案了解原因。
如果您像这样实现后台服务,将为您处理附加线程的关闭。在您的实现中,ExecuteAsync
您只需检查是否应该停止执行所提供的CancellationToken
. 您还应该asnyc
尽可能使用实现并CancellationToken
在那里提供实现,以便线程可以正常结束。您永远不需要调用Thread.Abort
甚至可以访问它Thread
本身;这一切都在后台为您完成。
由于这不是对您提出的问题的直接答案,而是更多地纠正您首先可能做错的事情而陷入这种情况,因此我首先想发表评论。然而,它太长了,有太多的事情要提及,这就是我将其作为答案的原因。
希望这可以帮助。
归档时间: |
|
查看次数: |
4954 次 |
最近记录: |