私は何度もこの問題に出くわし、ほとんどはハックで解決しましたが、それを行う「適切な」方法を見たいと思っています。
私は、エンドポイントが「クエリ」を要求し、それに対して「応答」を受け取るという方法で、RPC に非常に似た通信プロトコルを作成しています。
ここで... クエリを送信し、その質問に対する応答を待って返す SendCommand という関数を実装したいと思います。
だから私は次のようなことができます
int outside_temp = SendCommand(What is the temperature outside).ToInt();
これに関する問題は、メッセージが非同期で送受信され、新しいメッセージが到着したこと、およびそれが何であったかをイベントによって通知されることです。上記のクエリへの応答が到着するまでスレッドをブロックし、そのデータ コンテンツを抽出して、呼び出し元に返す必要があります。
私の問題は、スレッドをブロックすることです。スレッドをブロックすることは問題ではありません。これはマルチスレッド アプリについて話しているため、UI がフリーズすることはありませんが、問題は、これを実現する正しい方法は何ですか?
SendCommand関数内でセマフォを初期化し、それを待って、メッセージ受信イベントハンドラーでセマフォを解放するという行に沿って何かを考えています(正しいメッセージであることを確認した後)?
よろしく、 axos88