Windows services 如何使用TcpListener通过阻塞调用终止windows服务

Windows services 如何使用TcpListener通过阻塞调用终止windows服务,windows-services,tcplistener,Windows Services,Tcplistener,我有一个运行单独后台线程的windows服务。在线程内部,它启动一个TCP服务器,该服务器使用TcpListener侦听客户端 我想知道,当出现如下阻塞时,如何优雅地关闭服务: listener.AcceptTcpClient(); 我发现,显然,windows服务可以中止任何其他线程,只要它们被设置为后台线程,但是如果其中一个线程被阻塞呢?这是否有区别?如果有,处理这种情况的最佳方法是什么?最好的方法是调用listener.Close on服务的停止事件。它将使用SocketExceptio

我有一个运行单独后台线程的windows服务。在线程内部,它启动一个TCP服务器,该服务器使用TcpListener侦听客户端

我想知道,当出现如下阻塞时,如何优雅地关闭服务:

listener.AcceptTcpClient();
我发现,显然,windows服务可以中止任何其他线程,只要它们被设置为后台线程,但是如果其中一个线程被阻塞呢?这是否有区别?如果有,处理这种情况的最佳方法是什么?

最好的方法是调用listener.Close on服务的停止事件。它将使用SocketException中止阻塞调用


被阻止或正在运行的线程的状态不影响线程为后台的事实。所以,如果您从后台线程调用listener.AcceptCpcClient,当服务停止时,它仍将被中止,

如果我没有调用listener.Close,会怎么样?“这不好吗?”贾法期望行为明智——仍然很好。我回答的最后两行解释了这一点。