Просто с помощью .net сокетов в качестве примера, я использую:Что такое преимущества вызовов асинхронного метода?
TcpListener listener = new TcpListener(ip, port);
while(true)
{
TcpClient client = socket.AcceptTcpClient();
DoSomethingWithClient(client);
}
Но другой способ, кажется, что-то вроде (основано на http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.beginaccepttcpclient.aspx):
public static ManualResetEvent tcpClientConnected = new ManualResetEvent(false);
public static void DoBeginAcceptTcpClient(TcpListener listener)
{
tcpClientConnected.Reset();
listener.BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpClientCallback), listener);
tcpClientConnected.WaitOne();
}
public static void DoAcceptTcpClientCallback(IAsyncResult ar)
{
TcpListener listener = (TcpListener) ar.AsyncState;
TcpClient client = listener.EndAcceptTcpClient(ar);
DoSomethingWithClient(client);
tcpClientConnected.Set();
}
ИМХО стиль асинхронного требует 3 раза столько же кода и выглядит как goto spaghetti - его трудно читать и заставляет вас выделять связанный код. Так почему бы вам использовать асинхронный способ? Предположительно, это должно иметь какое-то преимущество?
Асинхронные вызовы предотвращают блокировку потока во время ожидания ответа на вызов. –
, если у вас длинный рабочий вызов (т. Е. 200 МБ BLOB), поток блокируется на такую длительность, а при работе с асинхронным способом вы все равно можете продолжать работать и делать другие вызовы и запросы. – Marco