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