所以你讀了標題,什麼時候Thread.Abort()不會實際中止?我聽說很多人都說它是一個危險的命令,它永遠不能保證工作,但從未真正能夠重現這一點。它總是爲我工作..什麼時候Thread.Abort()不會實際中止?
是否有可能導致Thread.Abort的()失敗consistantly任何具體的情況?
所以你讀了標題,什麼時候Thread.Abort()不會實際中止?我聽說很多人都說它是一個危險的命令,它永遠不能保證工作,但從未真正能夠重現這一點。它總是爲我工作..什麼時候Thread.Abort()不會實際中止?
是否有可能導致Thread.Abort的()失敗consistantly任何具體的情況?
你還讀過the documentation嗎?
該線程不保證立即中止或完全中止。如果線程在作爲中止過程的一部分調用的finally塊中執行無限量的計算,則會發生這種情況,從而無限期地延遲中止。要等到線程中止,可以在調用Abort方法後調用線程上的Join方法,但不能保證等待會結束。
...
如果中止被稱爲對尚未啓動一個線程,當開始被稱爲線程將中止。如果在被阻塞或正在休眠的線程上調用Abort,線程將被中斷,然後中止。
如果在已掛起的線程上調用Abort,則會在調用Abort的線程中拋出ThreadStateException,並且AbortRequested將添加到正被中止的線程的ThreadState屬性。在調用Resume之前,不會在掛起的線程中拋出ThreadAbortException。
如果在託管線程執行非託管代碼時調用Abort,則線程返回到託管代碼之前不會拋出ThreadAbortException。
如果兩次調用Abort同時發生,一次調用可能會設置狀態信息,另一次調用可能會執行中止。但是,應用程序無法檢測到這種情況。
在線程上調用Abort後,線程的狀態包括AbortRequested。由於成功調用Abort而導致線程終止後,線程狀態將更改爲Stopped。 具有足夠的權限,作爲中止目標的線程可以使用ResetAbort方法取消中止。有關演示調用ResetAbort方法的示例,請參見ThreadAbortException類。
感謝..我沒有谷歌的答案,但沒有發現在搜索結果中的文檔,也許將來我會更仔細地檢查MSDN。 – caesay 2011-05-08 04:48:52
沒想到如此簡單地搜索。 – caesay 2011-05-08 04:56:51
@ ta.speot.is很遺憾,你沒有更多的upvotes,這是我見過的Thread.Abort問題的最佳答案:)。 – ipavlu 2017-07-02 21:32:59