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