Может кто-нибудь объяснить асинхронный сокет в C #?Я только что следовал примеру MSDN, вот часть моего кода:
public void Start()
{
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(IPAddress.Any, port));
serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 10000);
serverSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 10000);
serverSocket.Listen(1000);
while (!stop)
{
Console.WriteLine("Server Thread #" + Thread.CurrentThread.ManagedThreadId);
allDone.Reset();
serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);
allDone.WaitOne();
}
}
private void AcceptCallback(IAsyncResult ar)
{
allDone.Set();
Socket serverSocket = (Socket)ar.AsyncState;
Socket clientSocket = serverSocket.EndAccept(ar);
Console.WriteLine("Client Thread #" + Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(100000); <----- All request is stopped, no response returned.
// ....
}
Я поставил «Thread.Sleep (100000)» после serverSocket.EndAccept, и я обнаружил, что остальные запросы не принимаются,Это пример вывода:
- Если Thread.Sleep (100000) отключен / прокомментирован, консоль показывает:
- Серверная нить # 10
- Клиентская нить# 11
- Серверная нить # 10
- Клиентская нить # 11
- Серверная нить # 10
- Клиентская нить # 11
- и т. Д.on ...
- Если включен Thread.Sleep (100000), консоль показывает:
- Серверная нить # 10
- Клиентская нить #11
- ... Никакой другой клиентский запрос не был принят до того, как первый запрос был выполнен.
Любое объяснение этой ситуации?Спасибо