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 回答