Dot-Net
如何正確處理 ThreadInterruptedException?
public void threadMethod() { try { // do something } catch (ThreadInterruptedException e) { Console.WriteLine("[Net]", role, "Thread interrupted."); n.CloseConnection(); } finally { if (isAutenticated == false) { n.CloseConnection(); } Dispatcher.Invoke(addMessage, "Network connection searching was disabled."); DebuggerIX.WriteLine("[Net]", role, "Finished"); Dispatcher.Invoke(threadStoppedDel); } }方法threadMethod通過System.Threading.Thread執行。執行緒可能會被中斷,因此可能會在 finally 塊中拋出異常*ThreadInterruptedException ,對嗎?*我是否必須再次將塊包含在 try-catch 中?
謝謝!
當執行緒被手動呼叫Thread.Interrupt中斷時,會引發執行緒中斷異常。Windows 本身不會使用該方法中斷您的執行緒。通常,您的程序將控制何時向執行緒發送中斷信號(並非一直如此)。由於中斷信號可用於某些流控制,因此通常不會快速連續發送兩次。
ThreadInterruptedException 在被中斷的執行緒中拋出,但直到執行緒阻塞。如果執行緒從不阻塞,則永遠不會拋出異常,因此執行緒可能會在不被中斷的情況下完成。
如果您的執行緒從不休眠或等待其他對象(進入 WaitSleepJoin 狀態),您將永遠不會看到拋出的異常。
保護你的執行緒應該是可以接受的。不要忘記也可以拋出 ThreadAbortException,並且這些異常稍微普遍並且可以更頻繁地拋出(應用程序正在關閉等)。