Обновить ключ в ConcurrentDictionaryC#

Место общения программистов C#
Ответить
Anonymous
 Обновить ключ в ConcurrentDictionary

Сообщение Anonymous »

Я хочу добавить метод 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»