概述
鑑於 Thread.Abort()
的不可靠性,開發人員需要強大的替代方案來終止 .NET 中的執行緒。 簡單的基於循環的方法(例如檢查易失性布林標誌)不足以滿足複雜的場景。
輪詢停止標誌
定期檢查指定的停止標誌是一種常見策略。 使用 volatile
標誌可確保及時更新,但需要仔細考慮,尤其是在 lambda 表達式中。
利用 TPL 取消
任務並行庫(TPL)提供卓越的取消機制。 與輪詢類似,但使用結構化構造,TPL 依靠協作取消模式來乾淨終止。
使用等待句柄
當執行緒依賴特定的計時或訊號時,等待句柄提供有效的控制。 等待函數允許受控的執行緒中斷和流程管理。
針對特定情況的方法
某些情況需要客製化終止方法。 例如,使用 Socket
類別的網路操作可以透過呼叫 Close()
來中斷,從而防止 Send
或 Receive
上的阻塞。
Thread.Interrupt:謹慎的方法
Thread.Interrupt()
提供了簡單性,但缺乏對安全中斷點的細粒度控制。它將異常注入到基底類別庫 (BCL) 內的特定阻塞呼叫中。 雖然由於潛在的歧義而通常不鼓勵這樣做,但它可能適合嚴重依賴這些 BCL 阻塞調用的演算法。
以上是如何乾淨地終止 .NET 中的執行緒?的詳細內容。更多資訊請關注PHP中文網其他相關文章!