1

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

我想知道当有这样的阻塞读取时如何优雅地关闭服务:

listener.AcceptTcpClient();

我发现显然 Windows 服务可以中止任何其他线程,只要它们被设置为后台线程,但是如果其中一个线程阻塞怎么办?这有什么不同吗?如果有,处理这种情况的最佳方法是什么?

4

1 回答 1

0

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

线程的状态(阻塞或运行)不影响线程是后台的事实。因此,如果您listener.AcceptTcpClient()从后台线程调用它仍然会在服务停止时中止,

于 2013-02-04T11:19:28.123 回答