例として.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();
}
IMHO async スタイルには 3 倍のコードが必要であり、goto スパゲッティのように見えます。読みにくく、関連するコードを分離する必要があります。では、なぜ非同期の方法を使用するのでしょうか? おそらく、それはいくつかの利点があるに違いありませんか?