0

あるスレッドでリクエストを送信し、別のスレッドでレスポンスを収集したいと考えています。リクエストとレスポンスを一致させることができませんでした。リクエスト/レスポンスをカスタマイズできないと仮定します。1 つのスレッドでリクエストを送信すると、受信側のスレッド/エンドでどのように機能しますか? 最初のリクエストを受信して​​いる間に同じソケットに送信し続けるため、受信したものがすべて混同されませんか?

4

2 に答える 2

1

マルチプレクサを書いているようです。各リクエストがある時点で正確に1つの応答を受け取ると想定する場合(重大なエラーがないと仮定)、応答を受信するときに応答を正しい順序。個々のリクエストがアトミックに中断されずに書き込まれるようにすることが重要です。これは、(書き込みの前後で)ロックするか、保留中のアウトバウンドメッセージの別のキューを作成することによって実行できます。

これを行う方法は、TaskAPIを使用することです。保留中の各応答は、基本的TaskCompletionSource<T>に(一部のT)にマップされます。応答を受信TrySetResultすると、呼び出し元に完了を示すことができます(またはエラー)。誰が、、、またはを使用できWaitますContinueWithawait

于 2013-03-12T12:33:14.357 に答える
0

主な未解決の問題は、要求/応答が相手によって非同期に処理されるかどうかです。
サーバーが同じ順序で応答している場合は、データのストアとして BlockingCollection を FIFO キューとして追加します。(BlockingCollection の既定のコレクション タイプは ConcurrentQueue です)。
送信者は BlockingCollection に追加し、受信者はコレクションから取得します。

于 2013-03-12T12:42:35.957 に答える