キューにあるすべてのメッセージに対して並列 foreach ループを実行しようとしていますが、次のエラーが発生します。
エラー: メッセージの受信時にプロパティ ボディが取得されませんでした。PropertyFilter が正しく設定されていることを確認してください。
foreach (並列なし) で同じループを実行すると、すべてうまくいきます。
この問題を解決するにはどうすればよいですか?
キューにあるすべてのメッセージに対して並列 foreach ループを実行しようとしていますが、次のエラーが発生します。
エラー: メッセージの受信時にプロパティ ボディが取得されませんでした。PropertyFilter が正しく設定されていることを確認してください。
foreach (並列なし) で同じループを実行すると、すべてうまくいきます。
この問題を解決するにはどうすればよいですか?
msdnによると、スレッドセーフではない方法を使用しているように見えます
GetAllMessages メソッドのみがスレッド セーフです
Peek()
and Receive()
(およびそのバリエーション) はスレッドセーフではありません。衝突を避けるために、ブロッキング メカニズムを考え出す必要があります。
並列処理は、シーケンシャルで (構成されている場合) トランザクションであるため、キューからメッセージを取得する場合には機能しません。
A と B を削除し、A の処理が失敗した場合、キューに戻されますが、B も削除されていますか?
GetAllMessages()
それらのすべてを返しますが、それらを削除しません。Receive()
メッセージをキューから完全に削除するには、各メッセージを個別に使用する必要があり
ます。