2016-11-22 28 views
6

対ICollector C#の関数を書くときに(もWebJobsに適用されます)Azureの機能で ICollector<T>IAsyncCollector<T>の違いは何ですか? Azureの機能:IAsyncCollector <T>

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

答えて

10

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

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

バッチングを使用すると、可能な限り効率的な方法で基本サービスとやりとりすることができます。例えば。 Azureテーブルでは、複数のエンティティを1回のバッチ操作で更新/永続化することができます。

+0

ほとんどのバインディングのように見えますが、バッチ処理はサポートされていません(https://github.com/Azure/azure-webjobs-sdk/issues/921を参照)。 ServiceBusはバッチ処理をしません! – Ronnie

関連する問題