Windows服務具有一個接收數據的開放式插槽(一個單獨的線程)如何關閉阻塞插座
爲響應服務OnShutdown
我想發出信號的工作線程關機,但它目前已被阻止在Receive
。
目前我在Receive
上超時檢查是否有掛起請求未決。有沒有更好的方法,而不是等待超時通知工作線程停止接收並通過其關閉邏輯?
Windows服務具有一個接收數據的開放式插槽(一個單獨的線程)如何關閉阻塞插座
爲響應服務OnShutdown
我想發出信號的工作線程關機,但它目前已被阻止在Receive
。
目前我在Receive
上超時檢查是否有掛起請求未決。有沒有更好的方法,而不是等待超時通知工作線程停止接收並通過其關閉邏輯?
調用線程中斷()應該讓它擺脫任何阻塞操作: http://msdn.microsoft.com/en-us/library/system.threading.thread.interrupt.aspx
注意,這將導致ThreadInterruptedException
(阻塞時),你應該適當地處理。
這會很棒,但似乎線程並未被Socket.Receive阻塞,從而使得此中斷被聽到。 – 2010-08-24 15:33:55
致電Socket.Close
。這將導致Socket.Receive
方法立即釋放異常。
異常是IO.IOException,它有一個SocketException作爲內部異常。內部異常的本地錯誤代碼爲10004.
最好的方法是使用異步套接字。反正他們的規模好得多。 – 2010-08-24 14:34:57
從某種意義上說它是異步的。當然,我並沒有使用BeginReceive - 但即使我是這樣,我如何讓它停止正在等待數據的接收。 – 2010-08-24 14:51:57