メッセージ キューからメッセージのリストを読み取るメソッドがあります。署名は次のとおりです。
IList<TMsg> Read<TMsg>(MessageQueue queue, int timeout, MessageQueueTransaction tx);
基本的な機能は、指定されたトランザクションを使用して、タイムアウト内にキューからできるだけ多くのメッセージを読み取ることです。私が抱えている問題は、タイムアウトを強制する最善の方法を決定することです。現在、2 つの作業バージョンがあります。これらは:
- タイムアウトで BeginPeek を使用します。成功した場合、メッセージはトランザクション受信呼び出しで削除されます。BeginPeek のタイムアウトは、読み取りが開始された時間と現在の時間に基づいて、各呼び出しの後に再計算されます。
- タイムアウト値で Receive を使用し、タイムアウトの期限が切れたときに例外をキャッチします。
最初のアプローチの問題は、キューを DenySharedReceive モードで読み取る必要があることです。そうしないと、メッセージが Peek と Receive の間に存在することを保証できません。2 番目の方法の問題は、例外をスローして処理する必要があることです (ただし、内部的かつ透過的に)。これは、各呼び出しが常に例外で終了するため、例外的な場合にのみ例外をスローするという考えに反するため、おそらく優れた設計ではありません。状況。
これをどのように達成するか、またはこれらの2つの手法と私の懸念についてコメントする他の提案はありますか?