拼吾爱程序人生

首页 » .Net编程 » Visual Studio.NET » 迭代器是一种基础性缺陷吗?
cobra - 2008-8-13 12:51:00
迭代器是.NET编程模型的核心。只有很少的开发人员以索引数据的方式工作,很多人都喜欢使用for-each循环来完成大部分任务。但是这种固有地顺序访问方式,在我们大量开发多线程应用程序的时候还适合吗?
Bill McCarthy写到



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

Bill继续提到,一种新IEnumerator要如何工作才能正确地支持多线程。

(文/Jonathan Allen  译/朱永光 出处/Infoq)

 您可能对 [Visual Studio.NET] 的这些文章也感兴趣:

.Net Micro Framework 模拟器详解 – 基本原理
.Net Micro Framework 模拟器详解 -- 内存配置
Web Client Software Factory 序
Visual Studio 2008 中可能存在的Bug(不断更新中)
.Net Compact Framework 基础篇之Socket通信
.Net Compact Framework 基础篇之获取MRU
Enterprise Library深入解析与灵活应用(3)
.NET的死锁调试工具——ACorns.Debugging
Visual Basic团队透露将为VB添加迭代器
微软已经发布同步框架1.0 RTM
谈spring的依赖注入
使用IIS 7自动将请求转发至内容服务器上
1
查看完整版本: 迭代器是一种基础性缺陷吗?
Modify by pin5i DZNT_ExpandPackage 2.1.3296 2007-2009 pin5i.com
 Total Unique Visitors: