私は (できれば) スレッドセーフなデータ構造を書いています。これは本質的に HashSets の ConcurrentDictionary のラッパーです。
私がやりたいことは、次のようないくつかの方法を持つことです:
private ConcurrentDictionary<K, HashSet<V>> _index = new ConcurrentDictionary<K, HashSet<V>>();
public void Remove(V value)
{
// Remove all instances of value from _index
}
public void Remove(K key, V value)
{
// Remove value from _index[key]
}
ConcurrentDictionary.AddOrUpdate(key, newValue, Func) に似たものが TryRemove に存在することを望んでいましたが、うまくいきませんでした。これらの Remove メソッドは両方とも、通常のディクショナリに対して非常に簡単に記述できますが、それらを同時に実行するとなると、途方に暮れます。誰かが私を正しい方向に向けますか?:)