是否有完全删除此错误的包装器?我在多个线程上有多个循环,我无法预测集合是否会在foreach中间进行修改,我想通过捕获此特定错误并获取集合的新处理程序可以轻松实现并循环遍历其余的元素但是我没有足够高级来覆盖这种函数的默认行为。
答案 0 :(得分:8)
假设您使用的是.NET 4,则可以使用System.Collections.Concurrent
中的一个集合,例如ConcurrentBag
。但是,您还没有真正指定任何要求,因此很难知道ConcurrentBag
本身是否符合要求。
如果您阅读了大多数集合的线程安全文档,您会发现它们不支持从一个线程进行安全修改,而另一个线程在没有锁定的情况下读取(或修改)该集合。如果它没有被任何东西修改,那么来自多个线程的List<T>
等来读没关系,但你不应该只有一个线程修改它。
理想情况下,尝试设计代码,以便不要要求对共享集合进行无限制的写入访问 - 但如果您真的需要它,请使用专为其设计的类型。