Azure 函数:ICollector<T> 与 IAsyncCollector<T>

Azure Functions: ICollector<T> vs IAsyncCollector<T>

Azure Functions 在编写 C# 函数时 ICollector<T>IAsyncCollector<T> 有什么区别(也适用于 WebJobs)?

我从示例中了解到,这些是我可以用来将函数参数绑定到输出绑定的接口。我还了解到这两个接口相应地具有非异步和异步方法签名(即 ICollector<T>.Add(item)IAsyncCollector<T>.AddAsync(item))。但他们在幕后做了什么?它们实际上是 post 数据到输出绑定,还是在函数执行结束时在内部缓冲和刷新(在这种情况下,为什么会有 AddAsync 方法)?

ICollector<T>.Add(item) 将始终立即 对基础服务执行添加操作。例如。 Queue 绑定的实现将在添加消息时立即将它们排入队列。

IAsyncCollector<T>.AddAsync(item) 行为因绑定而异,具体取决于基础服务是否支持 批处理 。在这种情况下,AddAsync 可能只会实际保存添加的项目,以便稍后通过相应的 IAsyncCollector<T>.FlushAsync 方法刷新。当函数成功完成时 FlushAsync 将被自动调用。您可以允许自动刷新行为为您刷新,或者您可以选择根据需要在您的函数中手动调用 FlushAsync

批处理可以允许绑定以最有效的方式与底层服务进行交互。例如。对于 Azure 表,多个实体可以在单个批处理操作中 updated/persisted。