2014-11-20 61 views
3

我讀過一堆我應該遠離Thread.Abort的地方。並且學會了很難的方式,它是真實的(它在單聲道上似乎具有相當平臺依賴的行爲):))好的方法來終止一個線程(沒有Thread.Abort)

那麼,從外部終止線程的好方法是什麼?

我明白,我可以添加這樣的代碼:

if (terminateRequested) return; 

或更好

if (terminateRequested) throw new MyTerminateThreadException(); 

但在現實世界情況下線程的代碼分佈在多個C#文件,它很快成爲一個煩人和重複的模式。

那麼線程處於睡眠狀態,等待服務器連接,互斥鎖還是執行不是我的代碼?你如何處理這些?

+1

http://stackoverflow.com/questions/3632149/question-about-terminating-a-thread-cleanly-in-net/3632642#3632642 - 可能的幫助? – Unflux 2014-11-20 23:33:59

+1

只有很多不同的場景才能在短時間內正確回答這個問題。它實際上只取決於每個特定的情況。這就是說,除非使用'Thread.Abort()'(我同意這是一種中斷線程的可怕方法),否則如果想要中斷某個正在運行的線程,則幾乎不會檢查某個狀態。 – 2014-11-20 23:34:33

+1

單聲道是否有「任務」類可用?如果是這樣,你可以使用'CancellationToken'來中斷一個線程。 – techvice 2014-11-20 23:37:53

回答