Считается ли плохой практикой комбинировать синхронные и асинхронные вызовы сокетов на одном сервере? Например (модифицированный из MSDN):Смешение синхронных и асинхронных вызовов сокетов
// Initalize everything up here
while (true) {
// Set the event to nonsignaled state.
allDone.Reset(); //allDone is a manual reset event
// 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();
}
public static void AcceptCallback(IAsyncResult ar) {
// Signal the main thread to continue.
allDone.Set();
// Handle the newly connected socket here, in my case have it
// start receiving data asynchronously
}
В этом случае, потому что вы ждете, пока каждое соединение не было сделано до прослушивания следующего подключения, похоже, что это в значительной степени блокировки вызовов. Учитывая, что это должно быть немного быстрее, потому что первоначальная обработка клиента будет выполняться по-другому, но теоретически это будет относительно небольшими накладными расходами.
Учитывая это, было бы считается плохой практикой, чтобы сделать что-то вроде:
while (true) {
// Start listening for new socket connections
Socket client = listener.Accept(); // Blocking call
// Handle the newly connected socket here, in my case have it
// start receiving data asynchronously
}
как на мой взгляд, этот код намного проще, чем в коде выше, и, если я правильно должен иметь относительно близкую производительность к вышеуказанному коду также.