是否在编译器中严格实现了新的c#异步特性
本文关键字:异步 实现 编译器 是否 | 更新日期: 2023-09-27 18:03:19
作为一个对探索"事物如何工作"感兴趣的c#程序员,我有兴趣了解更多关于使新的async功能工作的过程。
我一直在关注Eric Lippert关于async的优秀系列文章:async博客文章
我不记得在任何地方看到任何关于这个特性实现的参考(在高层),除了"编译器为我们做了大部分工作"这个事实。
这个特性是严格的编译器特性吗?编译器会以某种方式重写代码吗?还是有其他东西,比如运行时支持,让这一切发生?
不,编译器中不完全是。它依赖于一些新的接口,如INotifyCompletion
和一些框架实现支持,如AsyncTaskMethodBuilder
。我不认为有任何CLR需要改变。
编译器做了很多工作,构建了一个状态机——它只引用了状态机中的一些类型。对了,许多与Task
相关的类型都进行了重大修改,主要是出于性能原因。
我有一系列的博客文章,最初是针对CTP写的,但只使用了。net 4和一些我自己编写的类。它们不会与产品实现相违背(因为随着时间的推移事情会发生一些变化),但它们会让您对幕后发生的事情有一个大致的印象。