Bill继续提到,一种新IEnumerator要如何工作才能正确地支持多线程。引用:如果你考虑一下迭代器获取下一个元素的这一主要任务,然后研究一下它是如何工作,你就应该明白它的重要设计缺陷……这个操作不是原子性的。迭代器是IEnumerator或IEnumerator(Of T)的实现,IEnumerator要求你首先调用MoveNext方法然后读取Current属性。如果你允许多线程使用同样的IEnumerator,那么你将得到这样一个调用序列:MoveNext、MoveNext、Current、Current,这样将跳过一个条目而重复下一个条目。所以IEnumerator并没有很好地考虑多线程的情况。这是一个已知的设计限制,但是不仅如此,像C#这样实现自己迭代器的语言还为每个线程生成了不同的迭代器。那就是说,C#不仅认可了这种限制,还加强了它。
您可能对 [Visual Studio.NET] 的这些文章也感兴趣: