Dea*_*Seo 11 .net c# base-class-library async-await
Microsoft.Bcl.Async
使开发人员能够使用async/await
没有.NET Framework 4.5的关键字,以便他们使用它们.
这很棒,这得益于Microsoft CLR和语言团队中人员的辛勤工作.
现在我很好奇这是如何工作的.
async/await
要求编译器做一些繁重的工作来将代码变成可以等待操作的东西.
编译器最初在.NET Framework 4.0下抛出编译错误,即使它清楚地知道什么async/await
意思(Visual Studio 2012/2013.)
那么这个库如何告诉编译器不要抛出与异步操作相关的特定编译错误,并且像在.NET Framework 4.5下一样解除一些代码?
YK1*_*YK1 11
async/await
只不过是C#5.0编译器转换.有没有async/await
在IL
一级.
一个简单的例子是using() { }
声明,它也是编译器转换.它只是将using
语句转换为try/finally
块.但是,依赖IDisposable
于.NET 1.1中定义的接口的存在.
同样,async/await
转换依赖于某些类型,如IAsyncStateMachine
.NET 4.5中定义的接口.在Microsoft.Bcl.Async
得到这些类型定义到.NET 4.0.
编辑
Microsoft.Bcl.Async程序集如何使编译器识别新关键字(async/await)?
不,不是的.C#5.0编译器已经知道关键字以及如何处理它们.但是,由于项目针对.NET 4.0,因此无法找到所需的类型.该Microsoft.Bcl.Async
包装在这些类型带来的.