gpt4 book ai didi

c# - Microsoft.Bcl.Async 是如何工作的?

转载 作者:可可西里 更新时间:2023-11-01 08:46:14 24 4
gpt4 key购买 nike

Microsoft.Bcl.Async 使开发人员能够在没有 .NET Framework 4.5 的情况下使用 async/await 关键字,他们应该以使用它们为目标。

太好了,这要感谢 Microsoft CLR 和语言团队的人们的辛勤工作。

现在我很好奇这是如何工作的。

async/await 要求编译器做一些繁重的工作,将代码转换成可以执行 await 操作的东西。

编译器最初会在 .NET Framework 4.0 下抛出编译错误,即使它清楚地知道 async/await 的含义(Visual Studio 2012/2013。)

那么这个库如何告诉编译器不要抛出与异步操作相关的特定编译错误,并像在 .NET Framework 4.5 下一样进行一些代码提升?

最佳答案

async/await 只不过是 C# 5.0 编译器转换。 IL 级别没有async/await

一个简单的例子是 using() { } 语句,它也是一个编译器转换。它只是将 using 语句转换为 try/finally block 。但是,依赖于 .NET 1.1 中定义的 IDisposable 接口(interface)。

同样,async/await 转换依赖于某些类型,例如 .NET 4.5 中定义的 IAsyncStateMachine 接口(interface)。 Microsoft.Bcl.Async 将这些类型定义获取到 .NET 4.0。

编辑

How does the Microsoft.Bcl.Async assembly cause the compiler to recognize a new keyword (async/await)?

不,它没有。 C# 5.0 编译器已经知道关键字以及如何处理它们。但是,它找不到所需的类型,因为项目是针对 .NET 4.0 的。 Microsoft.Bcl.Async 包引入了这些类型。

关于c# - Microsoft.Bcl.Async 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22060691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com