2016-03-28 8 views
0

私はAzure Service Bus Queueからメッセージを取得中に自分自身を呼び出す簡単な再帰的な方法を持っています。このメソッドは、メッセージをメッセージのリストに追加し、キューにメッセージがなくなると、処理する親メソッドにリストを返します。手動で再帰の深さを制限しますか?

通常の状況では、すべてが正常に実行されていると、到着したときと同じくらい速くキューからメッセージを引き出しているため、キューに複数のメッセージが存在することはありません。しかし理論的には、プロセッサーがダウンすると、メッセージが急に積み重なり、メッセージの数が膨大になる可能性があります。

正常に処理を中止して処理するメッセージのバッチを返送する前に、キューから取り出してリストに入れるメッセージの個数に人為的な制限を設けたいもう一度行く。しかし、私はこれを行うための最善の方法は不明です。私は整数を作成して各呼び出しに追加し、値をチェックしてから、ある点に達したときに処理を中止することができます。しかし、良い方法がありますか?

+2

整数をインクリメントするより簡単なことはありません... –

+0

ok。ちょうど私が踏み込むことができる再帰の深さを数えたC#.NET属性で造られたあいまいなものがあるかどうかは不思議でした。 –

+1

再帰はタスクに適切ですか? –

答えて

1

だけリミッタとして、リストのサイズを使用する - あなたはすでにあなたのための1つのトラックを保っているからアイテムを処理しているデータ構造ので、あなたも、整数カウントを必要としない:

if (myMessageList.Length < maxAllowedValue) { 
    // execute your getter procedure which includes 
    // a call to self()... 
} 

Listの代わりにConcurrentQueueを使用することをお勧めします。これは、再帰的なデータ構造体充填メソッドの動作中にLengthを安全に変更できるようにするためです。

+0

良い悲しみ。なぜ私はこれを考えなかったのか分かりません! –

関連する問題