【发布时间】:2016-03-11 16:11:02
【问题描述】:
根据文档,EventHubClient 的所有非静态调用都不是线程安全的。这意味着我不能轻易地从我想要的任何地方调用以下函数:
public async Task SendBatchAsync(IList<EventData> eventHubBatch)
{
try
{
await this.eventHubClient.SendBatchAsync(eventHubBatch);
}
catch (Exception ex)
{
Console.WriteLine("ERROR (EH WRITER): {0}", ex.Message);
}
}
想知道有什么替代品吗?
- 锁定
- 同步线程上下文
- 保存到某个队列并拥有一个基于线程池的异步/等待 while 循环,该循环从队列中读取并进一步发布到 EventHub
更新:来自 Event Hub 团队的 Eric 确认在多线程环境中使用 SendAsync 是安全的。
更新 2:MSDN 文档刚刚更新(在 2 小时内,哇!)。现在它说:“这种类型的任何公共静态或实例成员都是线程安全的。”。
【问题讨论】:
-
stackoverflow.com/questions/26898930/… 的有争议的重复(或答案 stackoverflow.com/a/26920160/1012240 应该适合你)
标签: c# multithreading azure-eventhub