ConcurrentDictionary.TryAdd は失敗しますか? 質問する

ConcurrentDictionary.TryAdd は失敗しますか? 質問する

これは学術的な質問ですが、同時辞書.TryAdd失敗するのでしょうか? 失敗するとしたら、どのような場合で、その理由は?

ベストアンサー1

はい、可能です。条件は次のとおりです(msdnから):

  • 引数NullException- キーがnull参照の場合
  • オーバーフロー例外- 要素の最大数に達したとき
  • 戻ってくる間違い同じキーを持つ要素がすでに存在する場合

繰り返しになりますが、これは同時実行性とは関係ありません。2 つのスレッドが同時にアイテムを挿入することを懸念する場合、次のことが発生する可能性があります。

  • キーが異なっている場合は、両方のインサートが正常に機能します。
  • 1 つの挿入は正常に動作して true を返しますが、もう 1 つの挿入は失敗し (例外なし)、false を返します。これは、2 つのスレッドが同じキーを持つアイテムを挿入しようとした場合に発生し、基本的に 1 つだけが勝ち、もう 1 つは負けます。

おすすめ記事