C#非同期ソケット通信ブロッキング

c# sockets
C#非同期ソケット通信ブロッキング

サーバー(具体的にはコマンド、応答、通知)でメッセージを送受信するソケットラッパークラスがあります。 また、ラッパーを介して送信するコマンドをテキストにシリアル化する消費クラスもあります。 私の問題は、コマンドが送信されると、特定のヘッダーを含むメッセージが返されるまで待つ必要があることです。 これを行うと、受信メソッドによって設定されたManualResetEvent.WaitOneを使用しているため、消費クラスがロックされます。 クラスロックを使用するときに問題になるのは、その間に別のメッセージを受信する可能性があり、それを処理できないためです。 クラスが他のイベントに応答できるように特定のオブジェクトをロックする方法はありますか?

送信方法:

    _waitingCommands.Enqueue(command);
    String commandText = command.ToString();
    _socket.Send(commandText);

受信方法:

if (response.Header.Type == Messages.MessageType.Response)
{
   if (command.Response == null)
      command.Response = response;

   _waitingCommands.Dequeue();
   command.Finished.Set();
}

  0  0


ベストアンサー

socket.BeginSendとsocket.BeginReceiveを使用します。 これらは、メインスレッドが処理を継続できるようにする別のスレッドをスピンオフします。 データが送信または受信されると、BeginSend / BeginReceiveメソッドに接続したメソッドが論理的な順序で起動します。

0


タイトルとURLをコピーしました