Windows服务有一个正在接收数据的开放套接字(在单独的线程上)
响应服务OnShutdown
我想通知工作线程关闭,但它目前在Receive
被阻止。
目前我正在Receive
超时检查是否有待处理的停止请求。有没有更好的方法,而不是等待超时通知工作线程停止接收并通过其关闭逻辑?
答案 0 :(得分:2)
致电Socket.Close
。它将导致Socket.Receive
方法抛出异常立即解除阻塞。
异常是IO.IOException,它将SocketException作为内部异常。内部异常的本机错误代码是10004。
答案 1 :(得分:0)
在线程上调用Interrupt()应该使其脱离任何阻塞操作: http://msdn.microsoft.com/en-us/library/system.threading.thread.interrupt.aspx
请注意,这会导致ThreadInterruptedException
(阻止时),您应该妥善处理。