簡體   English   中英

如何在ASP.NET Core中殺死線程

[英]How to kill a thread in asp.net core

我正在使用asp.net內核編寫應用程序,由於我一直在運行循環,因此需要在其中創建一個新線程。 在某個時候,我需要研磨該線程。 在asp.net中,使用Thread.abort是解決方案,但在asp.net核心中將其刪除。 有什么替代解決方案?

不要為此類創建自己的線程!

在asp.core中有一個內置方法可以使用長時間運行的任務。 您應該在這里閱讀有關內容。

您應該創建一個從BackgroundService派生的類。 使用此類是創建實現IHostedService的后台服務的最簡單方法。 然后,可以通過在ConfigureServices方法中調用services.AddHostedService<YourBackgroundService>()將其添加到程序中。

注意:在我鏈接的頁面中,他們使用AddSingleton而不是AddHostedService 在.NET核心2.1及以上,你應該使用AddHostedService ,不AddSingleton (有一些例外,但我們一般這里所說的)。 請參閱此答案以了解原因。

如果您這樣實現后台服務,則將為您處理其他線程的關閉。 ExecuteAsync的實現中,您只需檢查是否應該停止使用提供的CancellationToken執行即可。 您還應該盡可能使用asnyc實現,並在那里提供CancellationToken ,以便線程可以正常結束。 您將不需要調用Thread.Abort甚至不需要訪問Thread本身。 這一切都在后台為您完成。

由於這並不是您所提問題的直接答案,而是更多地糾正了您可能首先出於這種情況而做錯的事情,所以我首先想對此發表評論。 但是,這太長了,有太多事情要提到,這就是為什么我將其作為答案。

希望這可以幫助。

通過由“ killing”線程設置並由需要被殺死的線程定期檢查的標志進行此操作的最干凈的方法。 Thread.Abort()不是一種可靠的方法。 甚至MSDN都說調用此方法通常會終止線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM