1. ホーム
  2. c#

ConcurrentDictionary.TryAdd は失敗することがありますか?

2023-07-30 03:42:22

質問

これはどちらかというと学術的な質問ですが ConcurrentDictionary.TryAdd は失敗しますか? また、失敗する場合、どのようなケースで、なぜですか?

どのように解決するのですか?

はい、できます。 msdnより ):

  • ArgumentNullException - キーがヌル参照である場合
  • OverflowException - 要素数が最大になったとき
  • を返します。 false 同じキーを持つ要素が既に存在する場合

繰り返しになりますが、これは同時実行とは関係ありません。2 つのスレッドが同時にアイテムを挿入することを心配する場合、次のようなことが起こり得ます。

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