如果我在多线程访问方法中使用ConcurentDictionary dic,我可以确保在这样的结构中:
foreach (Subscription sub in subscriptions[ex].Values)
{
....
}
subscriptions
ConcurrentDictionary<string, ConcurrentDictionary<long, Subscription>>
通过多种方法运行时不会改变,以便进行线程保存?或者我应该像这样使用锁:
lock(padLock)
{
foreach (Subscription sub in subscriptions[ex].Values)
{
....
}
}
使其正常工作?
ConcurrentDictionary 的所有公共和受保护成员 是线程安全的,可以从多个线程并发使用。
所以是的,即使其他线程在您迭代 Values
集合时修改了它,您也不会安全。
通过修改,我的意思是它添加新对或更改字典中的现有值。