我的应用程序旨在通过 TCP 侦听来自客户端的传入消息。我使用的是 TCPListner 和“BeginAcceptTcpClient”方法。在建立连接时,我正在做的是使用以下方法为每个连接创建一个新线程: ThreadPool.QueueUserWorkItem(new WaitCallback(HandleClientCommNew), client);
我的问题是,当回调函数完成工作时线程会发生什么。如果答案是它自己终止,我的问题是它不是,我的进程中有大量线程挂起,否则终止线程的最佳做法是什么。
附带说明一下,有问题的客户端按自己的方式处理连接和断开连接,这意味着我必须控制它们。
编辑
public void Init()
{
this.tcpListener = new System.Net.Sockets.TcpListener(IPAddress.Parse("0.0.0.0"), 1000);
this.listenThread = new Thread(new ThreadStart(ListenForClients));
}
private void ListenForClients()
{
this.tcpListener.Start();
StartAccept();
}
public void StartAccept()
{
this.tcpListener.BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpClientCallback), tcpListener);
}
public void DoAcceptTcpClientCallback(IAsyncResult ar)
{
StartAccept();
TcpListener listener = (TcpListener)ar.AsyncState;
TcpClient client = listener.EndAcceptTcpClient(ar);
ThreadPool.QueueUserWorkItem(new WaitCallback(HandleClientCommNew), client);
}
private static void HandleClientCommNew(object stateInfo)
{
TcpClient tcpClient = (TcpClient)stateInfo;
AsyncCallback callback = null;
callback = ar =>
{
bytesRead = clientStream.EndRead(ar);
clientStream.BeginRead(message, 0, 4500, callback, null);
}
clientStream.BeginRead(message, 0, 4500, callback, null);
}