A.Net4 Gem: ConcurrentDictionary - советы и рекомендации
Я начал использовать новый ConcurrentDictionary из .Net4 для реализации простого кэширования для проекта потоковой передачи.
Но мне интересно, о чем я должен заботиться/быть осторожным при его использовании?
Каковы были ваши впечатления?
Ответ 1
Пользователи потокобезопасны, но вы не должны ожидать, что последовательность вызовов будет потокобезопасной. Например, вы не можете ожидать, чтобы следующее было потокобезопасным:
if (!dictionary.ContainsKey(key))
{
// Another thread may have beaten you to it
dictionary.Add(key, value);
}
Вместо этого используйте новый безопасный для потока API - например.
AddOrUpdate (последний выигрывает в случае состояния гонки) или GetOrAdd (первый выигрывает в случае состояния гонки).
Ответ 2
У меня не было проблем с объектами коллекции Concurrent. Они значительно повышают мою производительность, позволяя мне не беспокоиться о проблемах concurrency с коллекциями и сосредоточиться на написании логики приложения.
Это не значит, что проблем нет. Просто ничего, с чем я столкнулся.
Ответ 3
ConcurrentDictionary является потокобезопасным. Вам не нужно беспокоиться об этом даже при использовании его из нескольких потоков.