通过 C# 简化 APM
可以共享数据。
这是匿名方法的出色功能,它可让您像使用方法参数和局部变量一样编写代码,但实际上编译器会重新编写您的代码,从堆栈中取出这些变量,并将它们作为字段嵌入对象。对象可在方法之间轻松传递,并且可以从一个线程轻松迁移到另一个线程,这对于使用 APM 而言是十分完美的。由于编译器会自动执行所有的工作,您可以很轻松地将最后一个参数的空值传递到 BeginRead 方法,因为现在没有要在方法和线程之间显式传递的数据。但是,我仍然无法使用 C# using 语句,因为此处有两个不同的方法,尽管看上去似乎只有一个方法。 以下内容显示了执行图 1 中摘录的代码后的输出。
我让 Main 方法显示应用程序主线程的托管线程 ID。然后我让 ProcessData 方法显示执行该方法的线程的托管线程 ID。如您所见,输出显示了所有异步模式让主线程之外的其他线程执行结果,而同步模式则让应用程序的主线程执行所有工作。 还应指出,C# 3.0 引入了一个新功能,称为 lambda 表达式。在执行同一操作时,lambda 表达式功能的语法比 C# 匿名方法功能更简洁。实际上,这对于 C# 团队来说是一个麻烦,因为现在它必须记录和支持产生相同结果的两个不同语法。为了使用 C# 3.0 lambda 表达式功能,ApmPatternWithAnonymousMethod 方法经修改后成为图 1 中所示的 ApmPatternWithLambdaExpression 方法。在此处可以看到语法略为简化,因为编译器能够自动推断出结果参数的类型为 IAsyncResult,而且“=>”要键入的内容比“delegate”少。 foreach 语句 C# 2.0 为 C# 编程语言引入了另一种功能:迭代器。迭代器功能的最初目的是让开发人员能够轻松地编写代码,遍历集合的内部数据结构。要了解迭代器,必须首先好好看一下 C# foreach 语句。编写如下代码时,编译器会将它转化为如图 2 所示的内容:
可以看到,foreach 语句提供了遍历集合类中所有项目的简便方法。但是,有很多不同种类的集合类 — 数组、列表、词典、树、链接列表等等 — 每个均使用其内部数据结构来表示项目集合。使用 foreach 语句就是代表要遍历集合中的所有项目,而并不关注集合类内部用来维护其各个项目的数据结构。 foreach 语句使得编译器生成对集合类的 GetEnumerator 方法的调用。此方法创建了一个实现 IEnumerator 接口的对象。此对象知道如何遍历集合的内部数据结构。while 循环的每次迭代都会调用 IEnumerator 对象的 Mov |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |