2

並行コレクション(たとえば、ConcurrentDictionary)を操作する場合、TryAddメソッドを使用する必要がありますか、それとも単なる古いインデックス割り当てを使用する必要がありますか?つまり、追加時にTryAddメソッドがブロックされるので、別のスレッドが値を削除しようとすると、追加が完了するまで待機する必要がありますか?

4

2 に答える 2

2

インデクサーのセッターと内部Add呼び出しの両方。TryAdd

public TValue this[TKey key]
{
  get { /*Irrelevant*/ }
  set
  {
    if ((object) key == null)
      throw new ArgumentNullException("key");
    TValue resultingValue;
    this.TryAddInternal(key, value, true, true, out resultingValue);
  }
}

Add方法:

void IDictionary<TKey, TValue>.Add(TKey key, TValue value)
{
  if (!this.TryAdd(key, value))
    throw new ArgumentException(this.GetResource("ConcurrentDictionary_KeyAlreadyExisted"));
}
于 2013-01-13T14:20:38.293 に答える
2

プレフィックスtryはスレッドセーフとは何の関係もありません。の例外のないバージョンですAdd

于 2013-01-13T14:35:06.283 に答える