thread.Interrupt()與thread.Abort()

青云Zeo發表於2024-12-06

thread.Interrupt()

thread.Interrupt()用於中斷一個處於等待狀態(如 Sleep、Join、Wait、Monitor.Wait等)的執行緒。

如果執行緒當前不是等待狀態,呼叫Interrupt()不會產生任何效果;

如果執行緒當前正在等待,呼叫Interrupt()會丟擲 ThreadInterruptedException 異常;

thread.Interrupt()允許執行緒優雅地處理中斷請求,不會強制終止執行緒,相對安全。

thread.Abort()

thread.Abort()用於立即終止執行緒,非常不安全,因為它可能導致資源洩漏和其他不穩定的狀態。

呼叫thread.Abort()時,執行緒會丟擲 ThreadAbortException 異常;

這個異常會導致執行緒執行棧上的所有方法立即退出,並且不會自動釋放資源;

即使執行緒捕獲了 ThreadAbortException ,也無法繼續執行後續程式碼,執行緒最終會被終止。

總結:
在大多數情況下,推薦使用 Thread.Interrupt() 來優雅地終止執行緒,而不是使用 Thread.Abort()。

相關文章