为什么SynchronizedCollection<T>
在IEnumerable.GetEnumerator()
的显式实现中未获得对SyncObj的锁定
IEnumerator IEnumerable.GetEnumerator()
{
return this.items.GetEnumerator();
}
隐式实现确实获得了SyncOb的锁(由反射器验证)。
在此集合的foreach循环期间可能会出现问题。一个线程可能已获取锁,而另一个线程可能会尝试使用foreach读取它?
最佳答案
因为类无法知道何时使用迭代器完成了客户端代码。这是System.Collection类上的MSDN Library文档始终警告迭代集合不是线程安全的原因之一。
尽管他们似乎忘记了在SynchronizedCollection的文章中提及这一点。具有讽刺意味的...
关于c#-3.0 - 为什么SynchronizedCollection <T>不会在IEnumerable.GetEnumerator()上锁定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1918061/