Я хочу добавить метод UpdateKey к наблюдаемому классу-оболочке вокруг ConcurrentDictionary.Примерно так:
private bool UpdateKeyWithNotification(TKey key1, TKey key2)
{
if (key1.Equals(key2)) return false;
TValue value;
var result = _dictionary.TryRemove(key1, out value);
if (!result) return false;
result = _dictionary.TryAdd(key2, value);
if (result) NotifyObserversOfChange();
return result;
}
Очевидно, что эта операция больше не является атомарной, поскольку она выполняет удаление, а затем добавление.У меня нет особых требований к производительности для UpdateKeyWithNotification, так как он будет использоваться редко, но я хотел бы иметь некоторую гарантию выполнения для поддержки _dictionary
между TryRemove
и TryAdd
.Я мог бы добавить некоторый тип RWMutex или объект блокировки вокруг операций TryRemove и TryAdd.Но это, вероятно, означало бы, что я также должен добавить операторы блокировки ко всем другим методам в классе.Есть ли альтернатива моему решению?