79

これはもっと学術的な質問です...しかし、ConcurrentDictionary.TryAddは失敗する可能性がありますか?もしそうなら、どのような場合に、そしてなぜですか?

4

3 に答える 3

117

はい、できます。条件は次のとおりです(msdnから)。

  • ArgumentNullException-キーがnull参照の場合
  • OverflowException-要素の最大数に達したとき
  • 同じキーを持つ要素がすでに存在する場合はfalseを返します

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

  • キーが異なる場合は、両方のインサートが正常に機能します。
  • 1つの挿入は正常に機能してtrueを返し、もう1つの挿入は失敗して(例外なく)falseを返します。これは、2つのスレッドが同じキーでアイテムを挿入しようとし、基本的に1つだけが勝ち、もう1つが負ける場合に発生します。
于 2012-07-16T09:57:44.303 に答える
8

確かにできます。キーがすでに存在する場合、メソッドはfalseを返します。

参照:http://msdn.microsoft.com/en-us/library/dd267291.aspx

戻り値のタイプ:System.Booleanキーと値のペアがConcurrentDictionaryに正常に追加された場合はtrue。キーがすでに存在する場合、このメソッドはfalseを返します。

于 2012-07-16T09:54:57.147 に答える
2

キーが辞書にすでに存在する場合は失敗します。

メモリが不足しているために値を追加できない場合は、代わりに例外が発生します。

于 2012-07-16T09:56:40.717 に答える