web-dev-qa-db-ja.com

Azure関数:ICollector <T>とIAsyncCollector <T>

C#関数を作成するときのAzure関数の_ICollector<T>_と_IAsyncCollector<T>_の違いは何ですか(WebJobsにも適用されます)?

サンプルから、これらが関数パラメーターを出力バインディングにバインドするために使用できるインターフェースであることを理解しています。また、2つのインターフェースには非同期メソッドと非同期メソッドのシグネチャがあることも理解しています(つまり、ICollector<T>.Add(item)IAsyncCollector<T>.AddAsync(item))。しかし、彼らは何を隠しているか?それらは実際にデータを出力バインディングにポストしますか、それとも関数実行の最後に内部的にバッファリングおよびフラッシュされますか(この場合、なぜAddAsyncメソッドによってそこに存在するのでしょうか)?

21
Chris Gillum

ICollector<T>.Add(item)は常に、基になるサービスに対して追加操作を実行します即時。例えば。 Queueバインディングの実装は、メッセージが追加されるとすぐにメッセージをエンキューします。

IAsyncCollector<T>.AddAsync(item)の動作は、基盤となるサービスがbatchingをサポートしているかどうかに基づいて、バインディングごとに異なります。そのような場合、AddAsyncは実際には、対応するIAsyncCollector<T>.FlushAsyncメソッドによって追加された項目を後でフラッシュされるとして保存するだけです。関数が正常に完了すると、FlushAsyncが自動的に呼び出されます。自動フラッシュ動作でフラッシュすることを許可するか、必要に応じて関数でFlushAsyncを手動で呼び出すことを選択できます。

バッチ処理により、バインディングは、可能な限り最も効率的な方法で、基礎となるサービスと対話できます。例えば。 Azureテーブルの場合、複数のエンティティを1回のバッチ操作で更新/永続化できます。

19
mathewc