Этот пример от Microsoft вращается вокруг асинхронного программирования сокетов. Однако, когда он вызывает асинхронную функцию BeginAccept, он затем вызывает функцию WaitOne (), которая в любом случае ожидает завершения BeginAccept.
// Bind the socket to the local endpoint and listen for incoming connections.
try {
listener.Bind(localEndPoint);
listener.Listen(100);
while (true) {
// Set the event to nonsignaled state.
allDone.Reset();
// Start an asynchronous socket to listen for connections.
Console.WriteLine("Waiting for a connection...");
listener.BeginAccept(
new AsyncCallback(AcceptCallback),
listener );
// Wait until a connection is made before continuing.
allDone.WaitOne();
}
} catch (Exception e) {
Console.WriteLine(e.ToString());
}
Console.WriteLine("\nPress ENTER to continue...");
Console.Read();
}
Какой смысл использовать неблокирующую версию Accept, если вы все равно сразу же заблокированы? Как я могу изменить эту версию, чтобы позволить мне делать другие вещи, пока BeginAccept не запустит функцию обратного вызова? Я новичок в C #, поэтому я супер потерян. Я из Си и, вероятно, справлюсь с этим, просто разбудив слушателя.
РЕДАКТИРОВАТЬ: Вот пример
https://docs.microsoft.com/en-us/dotnet/framework/network-programming/asynchronous-server-socket-example