【发布时间】:2014-03-07 03:53:39
【问题描述】:
我正在使用ThreadPool 分别处理我的 Socket 服务器中的每个连接的 Socket。但是我想知道 BeginReceive 的回调是否也会在 ThreadPool 中执行
ThreadPool.QueueUserWorkItem(o =>
{
if (ClientExchange != null && ClientExchange(asynchronousState)) {
if (ClientConnect != null) {
ClientConnect(asynchronousState);
}
}
ConnectedClients.Add(ipEndPoint, socket);
socket.BeginReceive(asynchronousState.Buffer, 0, asynchronousState.Buffer.Length, SocketFlags.None, HandleAsyncReceive, asynchronousState);
});
HandleAsyncReceive 回调是否也在新线程(被线程池抓取)中执行?
【问题讨论】:
-
打印
Thread.CurrentThread.ManagedThreadId时看到了什么? -
您不需要显式使用池线程。您可以在调用
BeginReceive-callback 的同一线程上进行处理,这将是一个随机但不同的池线程。检查 cmets 到这个答案:stackoverflow.com/a/22017432/1768303
标签: c# multithreading