我使用ThreadPool
分别处理套接字服务器中的每个连接的套接字。但是我想知道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
回调是否也在新线程中执行(由ThreadPool抓取)?
答案 0 :(得分:1)
在线程池线程上调用异步IO的回调。
永远不会为任何特定目的保留线程池线程。每个工作项都可以看到完全不同的线程ID。或者所有工作项都可以看到相同的thread-id。没有任何保证。
通常,您不依赖于运行代码的确切线程。这通常是一个错误。你不应该关心这个(我不清楚你为什么这么做)。
我想要做的是处理不同线程上的每个接受的Socket
在异步IO的上下文中没有意义。 Async IO是无线程的。当IO正在运行时,没有使用它的线程。