Я хочу добавить метод 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. Но это, вероятно, означало бы, что мне также придется добавить операторы блокировки ко всем остальным методам класса. Есть ли альтернатива моему решению?
Подробнее здесь:
https://stackoverflow.com/questions/538 ... dictionary