编写C#函数时,Azure函数中ICollector<T>
和IAsyncCollector<T>
之间的区别是什么(也适用于WebJobs)?
我从样本中了解到这些是我可以用来将函数参数绑定到输出绑定的接口。我也理解这两个接口相应地具有非异步和异步方法签名(即ICollector<T>.Add(item)
和IAsyncCollector<T>.AddAsync(item)
)。但他们在封面下做了什么?它们实际上是将数据发布到输出绑定,还是在函数执行结束时进行内部缓冲和刷新(在这种情况下,为什么会使用AddAsync
方法?)
答案 0 :(得分:18)
ICollector<T>.Add(item)
将始终针对基础服务立即执行添加操作。例如。队列绑定的实现将在添加消息时立即将消息排入队列。
IAsyncCollector<T>.AddAsync(item)
行为因绑定而异。在这种情况下,AddAsync
实际上只能通过相应的IAsyncCollector<T>.FlushAsync
方法将添加的项目保存为以后刷新。函数成功完成后,将自动调用FlushAsync
。您可以允许自动刷新行为为您冲洗,或者您可以选择在您的功能中手动调用FlushAsync
。
批处理可以允许绑定以最有效的方式与底层服务进行交互。例如。对于Azure表,可以在单个批处理操作中更新/保留多个实体。