【发布时间】:2013-06-30 15:12:23
【问题描述】:
是否有完全消除此错误的包装器?我在多个线程上有多个循环,我无法预测集合是否会在 foreach 中间被修改,我想通过捕获这个特定错误并为集合获取新处理程序很容易实现并循环遍历其余元素,但是我还不够先进,无法使用这样的函数覆盖默认行为。
【问题讨论】:
-
IEnumerable.ToArray()
标签: c#
是否有完全消除此错误的包装器?我在多个线程上有多个循环,我无法预测集合是否会在 foreach 中间被修改,我想通过捕获这个特定错误并为集合获取新处理程序很容易实现并循环遍历其余元素,但是我还不够先进,无法使用这样的函数覆盖默认行为。
【问题讨论】:
IEnumerable.ToArray()
标签: c#
假设您使用的是 .NET 4,您可以使用 System.Collections.Concurrent 中的集合之一,例如 ConcurrentBag。但是,您并没有真正指定任何要求,因此很难知道ConcurrentBag 本身是否能够满足这些要求。
如果您阅读了大多数集合的线程安全文档,您会发现它们不支持在另一个线程读取(或修改)集合时从一个线程进行安全修改,而无需锁定。如果没有被任何东西修改,从多个线程读取 List<T> 等是可以的,但你甚至不应该有一个线程修改它。
理想情况下,尝试设计您的代码,以便您不需要这种对共享集合的无限制写访问权限 - 但如果您真的需要它,请使用专为它设计的类型。 p>
【讨论】: