Подтвердить что ты не робот

A.Net4 Gem: ConcurrentDictionary - советы и рекомендации

Я начал использовать новый ConcurrentDictionary из .Net4 для реализации простого кэширования для проекта потоковой передачи.

Но мне интересно, о чем я должен заботиться/быть осторожным при его использовании?

Каковы были ваши впечатления?

4b9b3361

Ответ 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 является потокобезопасным. Вам не нужно беспокоиться об этом даже при использовании его из нескольких потоков.