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