2016-11-22 44 views
6

Azure中的ICollector<T>IAsyncCollector<T>有什麼區別編寫C#函數(也適用於WebJobs)時的函數?Azure函數:ICollector <T> vs IAsyncCollector <T>

我從樣本中瞭解到,這些是我可以用來將函數參數綁定到輸出綁定的接口。我也明白這兩個接口相應具有非異步和異步方法簽名(即ICollector<T>.Add(item)IAsyncCollector<T>.AddAsync(item))。但是,他們在做什麼在幕後?他們是否真的將數據發佈到輸出綁定,或者它是否在函數執行結束時進行內部緩衝和刷新(在這種情況下,爲什麼會使用AddAsync方法)?

回答

10

ICollector<T>.Add(item)將始終對底層服務立即執行添加操作。例如。 Queue綁定的實現會在添加消息時立即將消息排入隊列。

IAsyncCollector<T>.AddAsync(item)根據底層服務是否支持批處理,行爲因綁定而異。在這種情況下,AddAsync可能實際上只能通過相應的IAsyncCollector<T>.FlushAsync方法將添加的項目保存爲以後沖刷。當功能成功完成FlushAsync將被自動調用。您可以允許自動沖洗行爲爲您沖洗,或者您可以選擇根據需要手動在您的功能中調用FlushAsync

配料可以允許結合與以最有效的方式底層服務進行交互。例如。對於Azure表,可以在單個批處理操作中更新/保留多個實體。

+0

除非它看起來像大多數綁定不支持批處理(見https://github.com/Azure/azure-webjobs-sdk/issues/921)。 ServiceBus不批如! – Ronnie