Threadsafe foreach枚举列表

Rad*_*094 11 c# multithreading

我需要枚举通用的IList <>对象.列表的内容可能会更改,如在其他线程中添加或删除,这将使用"已修改集合;枚举操作可能无法执行"来终止我的枚举.

在IList <>上做线程安全foreach的好方法是什么?最好的是没有克隆整个列表.无法克隆列表引用的实际对象.

Joh*_*kin 13

克隆列表是最简单,最好的方法,因为它可以确保您的列表不会从您的下方更改.如果列表太大而无法克隆,请考虑在读取/写入之前必须对其进行锁定.

  • @John 为了克隆列表,你必须迭代它。以非线程安全的方式。那么这不是和从列表中获取一样吗? (2认同)
  • 克隆时,仍有机会更改集合。它仍然是非线程安全的。 (2认同)