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 下一样进行一些代码提升?
async/await
无非是 C# 5.0 编译器转换。没有async/await
at IL
level.
一个简单的例子是using() { }
语句,这也是编译器转换。它只是转换using
声明给try/finally
堵塞。然而,存在依赖于IDisposable
.NET 1.1 中定义的接口。
同样,async/await
转换取决于某些类型,例如IAsyncStateMachine
.NET 4.5 中定义的接口。这Microsoft.Bcl.Async
将这些类型定义获取到 .NET 4.0。
EDIT
Microsoft.Bcl.Async 程序集如何使编译器识别新关键字(async/await)?
不,不是的。 C# 5.0 编译器已经了解关键字以及如何处理它们。但是,由于项目面向 .NET 4.0,因此无法找到所需的类型。这Microsoft.Bcl.Async
包引入了这些类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)