同じサーバー上で同期ソケット呼び出しと非同期ソケット呼び出しを組み合わせることは悪い習慣と見なされますか? 例 (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
}
私の考えでは、このコードは上記のコードよりもはるかに単純であり、私が正しければ、上記のコードに比較的近いパフォーマンスも得られるはずです。