《Async in C# 5.0》第十四章 深入探讨编译器对于async的转换

C# 编译器借助 .NET 框架基类库实现了异步功能。运行时本身无需任何更改即可支持异步。这意味着 await 是被转换成了某种使用早期版本的 C# 我们自己就可以编写的东西。我们可以使用 .NET Reflector 这样的反编译器来查看生成的代码。

除了单纯的感兴趣之外,理解这些生成的代码还有助于调试、性能分析以及对异步代码进行其他诊断。

存根方法(Stub Method)

异步方法被替换为存根方法。调用异步方法时,首先运行的是存根方法。让我们以这个简单的异步方法为例:

public async Task<int> AlexsMethod() 
{
    int foo = 3;
    await Task.Delay(500);
    return foo;
}

编译器生成的存根方法如下所示:

public Task<int> AlexsMethod()
{
    <AlexsMethod>d__0 stateMachine = new <AlexsMethod>d__0();
    stateMachine.<>4__this = this;
    stateMachine.<>t__builder = AsyncTaskMethodBuilder<int>.Create();
    stateMachine.<>1__state = -1;
    stateMachine.<>t__builder.S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rabbitlzx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值