EventHubClientを使用して、C# で複数のスレッドからAzure イベント ハブにメッセージを発行するコードを書いています。EventHubClient のドキュメントには、かなり標準的なボイラー プレートが含まれています。
「この型の public static (Visual Basic では共有) メンバーはスレッド セーフです。インスタンス メンバーは、スレッド セーフであるとは限りません。」
スレッドセーフであると私が最も期待する4 つの send メソッドのいずれにも、スレッドセーフに関する追加のドキュメントはありません。send メソッドがスレッドセーフではないと信じていたら、メッセージを送信するたびに新しい EventHubClient インスタンスを作成することになります。基礎となる tcp 接続は明らかに再利用されるため、手順を実行しない限り、オーバーヘッドはそれほど大きくない可能性があります。分割された送信者でも同様の問題が発生しますが、送信者を作成する非同期メソッドがある場合、独自の AMQP 接続が存在する可能性があります。
ドキュメントにもかかわらず、すべてではないにしても、EventHubClient のインスタンス メソッドの一部はスレッド セーフですか?
また、Azure の関係者にとって、これをドキュメントで明確にすることは可能でしょうか? この種のドキュメントの問題 (間違っている可能性が高いと仮定) は、Azure テーブルにも影響を与えるようであり、MSDN ドキュメント内では一般的に一般的です。EventHub に関しては、これはKafkaの明確なスレッド セーフ ステートメントとは対照的であり、AWS Kinesisは少なくともすべてを安全でないと明示的にラベル付けしていません。SDK のオープン ソース部分に EventHubs が見つからなかったため、自分で確認できませんでした。