【发布时间】:2014-03-21 18:56:03
【问题描述】:
不是传统意义上的返回值优化,但是我想知道你什么时候有这样的情况:
private async Task Method1()
{
await Method2();
}
private async Task Method2()
{
await Method3();
}
private async Task Method3()
{
//do something async
}
这显然可以写得更优化:
private Task Method1()
{
return Method2();
}
private Task Method2()
{
return Method3();
}
private async Task Method3()
{
//do something async
}
我只是想知道是否有人知道 (MS) 编译器是否足够聪明,不会首先为 Method1() 和 Method2() 生成状态机?
【问题讨论】:
-
我猜不是,因为你仍然可以从其他地方调用方法
-
@knittl:对不起,我不确定你的意思。方法1和2仍然返回可以等待的任务
-
你为什么不试试呢?编译代码并检查反射器或 ildasm 中的程序集。由于 await 是 C# 编译器功能(而不是 JIT 编译器功能),您可以轻松查看是否存在差异。
-
@cremor:基本上是因为我从来没有时间学习 CIL。是的,我同意我的懒惰,这可能是一个很好的学习练习。
-
我使用JetBrains's dotPeek,这是一个免费且很棒的工具。重新创建
async/await语句足够聪明,但也可以查看编译器生成的原始状态机的样子。
标签: c# optimization async-await