4

是否有完全消除此错误的包装器?我在多个线程上有多个循环,我无法预测集合是否会在 foreach 中间被修改,我想通过捕获这个特定错误并为集合获取新处理程序很容易实现并循环遍历其余元素,但是我还不够先进,无法使用这样的函数覆盖默认行为。

4

1 回答 1

8

假设您使用的是 .NET 4,您可以使用 中的集合之一System.Collections.Concurrent,例如ConcurrentBag. 但是,您并没有真正指定任何要求,因此很难知道自己是否ConcurrentBag会满足这些要求。

如果您阅读了大多数集合的线程安全文档,您会发现它们不支持在另一个线程读取(或修改)集合时从一个线程进行安全修改,而无需锁定。如果它没有被任何东西修改,那么从多个线程中读取 etc 是很好的,但你甚至不应该有一个线程来修改List<T>

理想情况下,尝试设计您的代码,以便您不需要对共享集合进行这种不受限制的写访问 - 但如果您真的需要它,请使用专为它设计的类型。

于 2013-06-30T15:15:54.027 回答