Но если я попытаюсь сделать что-то вроде этого:
Код: Выделить всё
if (!_store.TryGetValue(book.Id, out Book existing))
{
throw new KeyNotFoundException();
}
if (!_store.TryUpdate(book.Id, book, existing))
{
throw new Exception("Unable to update the book");
}
Я не могу использовать индексатор, потому что он добавляет книгу, если она не существует, и я не могу проверить существование ключа, потому что он также не будет атомарным.
Мой код был изменен следующим образом:
Код: Выделить всё
while (true)
{
if (!_store.TryGetValue(book.Id, out Book existing))
{
throw new KeyNotFoundException();
}
if (_store.TryUpdate(book.Id, book, existing))
{
break;
}
}
Но если я буду использовать блокировку при обновлении и удалении методы, я потеряю преимущество использования ConcurrentDictionary.
Как правильно решить мою проблему?
Подробнее здесь: https://stackoverflow.com/questions/527 ... f-it-exist
Мобильная версия