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