作为一名有兴趣探索“工作原理”的C#程序员,我有兴趣了解更多关于使新的异步功能发挥作用的过程。
我已经关注了Eric Lippert关于异步的优秀文章系列:Async blog posts
我不记得在任何地方看到任何对此功能的实现的引用(在高级别),除了“编译器正在为我们完成大部分工作”这一事实。
这个功能严格来说是编译器功能吗?编译器是否以某种方式重写代码,那就是它?还是有其他的东西,比如运行时支持,可以实现这一点?
答案 0 :(得分:20)
不,它在编译器中不是完全。它依赖于一些新的接口,例如INotifyCompletion
和一些框架实现支持,例如AsyncTaskMethodBuilder
。我认为不需要进行任何CLR更改。
编译器做了很多工作,构建了一个状态机 - 它只是引用了状态机中的一些类型。哦,很多Task
- 相关类型都是出于性能原因而进行了重大修改。
我有一个series of blog posts最初是针对CTP编写的,但仅使用vanilla .NET 4和我自己掀起的一些类。它们不会对生产实施起作用(随着时间的推移,情况会有所改变),但它们会给你一个关于幕后发生的事情的总体印象。