【发布时间】:2017-06-07 03:32:50
【问题描述】:
我在这种情况下,有一个大字典由一个线程以相当高的频率随机更新,还有另一个线程试图拍摄字典的快照以保存为历史记录。 我目前正在使用这样的东西:
Dictionary<string, object> dict = new Dictionary<string, object>();
var items = dict.Values.ToList();
这在大多数情况下都可以正常工作,只是偶尔会抛出:
System.InvalidOperationException:集合已修改;枚举 操作可能无法执行。
我明白为什么会发生这种情况,但我不知道我该怎么做才能避免集合修改错误。
迭代此类集合的最佳方法是什么?
我也尝试过 ConcurrentDictionary,但没有运气。 为什么? ConcurrentDictionary 线程是否仅在项目级别安全?
【问题讨论】:
-
你应该使用
lock。 -
在我的情况下,这里建议的许多解决方案也可以使用,但接受的解决方案最适合我。抱歉回复晚了。
标签: c# multithreading dictionary concurrency ienumerable