У меня есть словарь поддерживает только add
и modify
операций и может работать одновременно, но всегда для разных ключей. Ключами являются int и значения являются ссылочным типом. Также изменение означает изменение некоторых свойств значения.C# Dictionary одновременное добавление или изменение только для разных ключей, требуется ConcurrentDictionary?
Мои вопросы:
- мне нужно использовать ConcurrentDictionary в этом случае делать? Если необходимо, как это помогает?
- Если одновременная модификация может произойти на одном и том же ключе, поможет ли ConcurrentDictionary обеспечить безопасность потока? Мое понимание - нет, это правильно?
Спасибо!
1. Да, вам необходимо использовать его. 2. [«Все эти операции являются атомарными и являются потокобезопасными по отношению ко всем другим операциям в классе ConcurrentDictionary. Единственными исключениями являются методы, которые принимают делегат, то есть AddOrUpdate и GetOrAdd."] (https://msdn.microsoft.com/en-us/library/dd287191(v=vs.110).aspx#Anchor_7) Нам по-прежнему нужен тег «please read the docs aloud to me». –
Что вы нашли, когда просмотрели документацию по каждому из этих типов в отношении того, действительно ли эти операции действительны? Как информация, которую вы находите, не отвечает на эти вопросы? – Servy
@EdPlunkett Спасибо. Читая документы и другие ответы SO, я думаю, что получаю это для первого вопроса. Да, мне нужно использовать параллельную версию. Поскольку при одновременном добавлении, dict может изменять размер, и это вызовет проблемы. Но для второго вопроса я все еще не очень ясен. Я думаю, что даже использовать параллельную версию. Когда я одновременно изменяю свойства в боковом значении, мне все равно нужно заблокировать значение. Это правда? Благодаря! – Student222