相关疑难解决方法(0)

在c#中,如何在多线程环境中迭代IEnumerable

我在这种情况下,有一个大字典,由一个线程以相当高的频率随机更新,还有另一个线程试图将字典的快照保存为历史记录.我目前正在使用这样的东西:

Dictionary<string, object> dict = new Dictionary<string, object>();
var items = dict.Values.ToList();
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都可以正常工作,除非它偶尔抛出:

System.InvalidOperationException:集合已被修改; 枚举操作可能无法执行.

我理解为什么会发生这种情况,但我不知道我该怎么做才能避免收集修改错误.

迭代此类集合的最佳方法是什么?

我也试过ConcurrentDictionary,但没有运气.为什么?ConcurrentDictionary线程只在项目级别安全吗?

c# concurrency ienumerable multithreading dictionary

6
推荐指数
1
解决办法
857
查看次数