新的C#异步function是否在编译器中严格实现

作为一名C#程序员,他有兴趣探索“如何工作”,我有兴趣了解更多关于使新的异步function工作的过程。

我跟随Eric Lippert关于异步的优秀文章系列: Async博客文章

我不记得在任何地方看到任何对此function的实现的引用(在高级别),除了“编译器正在为我们完成大部分工作”这一事实。

这个function严格来说是编译器function吗? 编译器是否以某种方式重写代码,就是这样? 还是有其他事情,如运行时支持,使这种情况发生?

不,它不完全在编译器中。 它依赖于一些新的接口,如INotifyCompletion和一些框架实现支持,如AsyncTaskMethodBuilder 。 我不相信有任何CLR更改需要。

编译器做了很多工作,构建了一个状态机 – 它只是引用了状态机中的一些类型。 哦,许多与Task相关的类型都是出于性能原因而进行了重大修改。

我有一系列博客文章 ,最初是针对CTP写的,但使用了vanilla .NET 4和一些我自己掀起的课程。 他们不会反对生产实施(随着时间的推移,事情会发生一些变化),但他们会给你一个关于幕后发生的事情的总体印象。