在将值导出到列表 ex 并清除该字典之后,使 ConcurrentDictionary 成为线程安全的任何想法。这样任何其他线程都无法在导出和清除之间添加数据。
像这样: ”
List<data> list;
list = (List<data>)_changedItems.Values; //get values before clearing
_changedItems.Clear();
" 并且添加是由其他线程使用函数 _changedItems.AddOrUpdate 完成的
现在,如果某个线程在清除行之前将数据对象添加到集合中,则在从字典中获取数据和清除内容之间可能会丢失新数据。
或者是添加和清除内部锁的唯一方法。
lock(object)
{
List<data> list;
list = (List<data>)_changedItems.Values;
_changedItems.Clear();
}
和
lock(object)
_changedItems.AddOrUpdate
需要一个清除函数来安全地从字典中返回所有已清除的项目。
-拉里