Мое приложение предназначено для прослушивания входящих сообщений от клиентов через TCP. Я использую TCPListner и метод BeginAcceptTcpClient. При подключении установлено, что я делаю, создавая новый поток для каждого соединения, используя: ThreadPool.QueueUserWorkItem (новый WaitCallback (HandleClientCommNew), клиент);TCPListener многопотоковая связь с несколькими клиентами
Мой вопрос здесь в том, что происходит с потоком, когда функция обратного вызова завершает работу. Если ответ заключается в том, что он заканчивается сам по себе, моя проблема в том, что это не так, и я получаю огромное количество потоков, зависающих в моем процессе, иначе лучшая практика прекращения потока.
С одной стороны, клиенты, о которых идет речь, обрабатывают соединения и разъединения по своему усмотрению, я должен контролировать их.
EDIT
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);
}
ThreadPool.QueueUserWorkItem не создает специальный поток для каждого как таковые. Откуда вы знаете, что у вас много «витков» в вашем процессе? Где вы это видите? – hawk
Widnows 7 Resource Monitor – ancdev
Это только темы ThreadPool. Типичный процесс .net будет содержать много потоков Managed (и O/S level), которые относятся к threadpool. Вам не нужно беспокоиться о их прекращении. – hawk