2016-11-14 2 views
1

Когда init-time, я добавил некоторые значения в словарь.C# когда я использую только TryGetValue в словаре .. это поточно-безопасный?

После этого мне нужно только TryGetValue.

В этом случае мне нужно заблокировать TryGetValue?

+0

Я думаю, что он должен быть потокобезопасным, но, пожалуйста, для параллельных сценариев используются параллельные структуры данных. – tym32167

+0

Читайте на всегда потокобезопасном, это напишите, что создает проблему –

ответ

2

Да, это поточно, если вы только читать/использовать TryGetValue:

Documentation:

Dictionary<TKey, TValue>может поддерживать несколько читателей одновременно, , пока коллекция не измененными. Тем не менее, перечисление через коллекцию по существу не является потокобезопасной процедурой. В редкий случай, когда перечисление связано с обращением к записи, коллекция должна быть заблокирована во время всего перечисления. Чтобы разрешить доступ к коллекции несколькими потоками для чтения и записи, вы должны реализовать свою собственную синхронизацию.

0

Чтение a Словарь после популяции является потокобезопасным.

Использовать ConcurrentDictionary Класс для обеспечения безопасности потоков в случаях использования, когда вам нужно читать и писать.

Из MSDN:

Представляет поточно-коллекцию пар ключ/значение, которое можно получить доступ несколькими потоками одновременно.

Пространство имен:
System.Collections.Concurrent Монтаж: mscorlib (в mscorlib.dll)

Link to MSDN here.