像这样:
“
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
需要一个Clear-function,可以安全地从字典中返回所有已清除的项目.
-Larry
解决方法 实际上,在序列中调用两个线程安全的方法并不能保证序列本身的原子性.你是正确的,锁定两个调用以获取值和清除是必要的. 总结以上是内存溢出为你收集整理的c# – ConcurrentDictionary和Clear() – 函数.使值导出线程安全而不会丢失数据全部内容,希望文章能够帮你解决c# – ConcurrentDictionary和Clear() – 函数.使值导出线程安全而不会丢失数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)