Azure ストレージから BLOB を削除する必要があるワーカー ロールを Azure に実装しています。ブロブのリストに約 10,000 のアイテムがあると仮定しましょう。
最も単純な同期アプローチは、おそらく次のようになります。
Parallel.ForEach(list, x => ((CloudBlob) x).Delete());
要件:
同じことを非同期に (単一のスレッドで) 実装したいと考えています。
同時接続数を 50 に制限したいので、同時に 50 の非同期接続しか実行されないときに 10K の削除を行います。1 つの削除が完了すると、新しい削除を開始できます。
解決?
これまでのところ、 this questionとthis oneを読んだ後、TPL Dataflowが進むべき道のようです。
これは非常に単純な問題であり、データフローはやり過ぎのように思えます。より簡単な代替手段はありますか?
そうでない場合、これはデータフローを使用してどのように実装されますか? 私が理解しているように、async
削除を実行する単一のアクション ブロックが必要です (必要await
ですか?)。ブロックを作成するときはMaxDegreeOfParallelism
、50 に設定する必要があります。次に、リストから 10K のブロブをブロックにポストし、block.Completion.Wait()
. これは正しいです?