我有一个运行单独后台线程的Windows服务。在线程内部,它启动一个TCP服务器,使用TcpListener监听客户端。
我想知道如果有阻塞读取,我可以优雅地关闭服务:
listener.AcceptTcpClient();
我发现显然一个Windows服务可以中止任何其他线程,只要它们被设置为后台线程,但是如果其中一个线程阻塞了怎么办?这是否有所不同?如果是这样,处理这种情况的最佳方法是什么?
答案 0 :(得分:0)
最好的方法是在服务的停止事件上调用listener.Close()
。它将使用SocketException
中止阻止通话。
线程的状态(阻塞或运行)不会影响线程是后台的事实。因此,如果您从后台线程中调用listener.AcceptTcpClient()
,它将在服务停止时中止,