@
morethansean ``` cs
var task = Task.FromResult<int>(1 + 2);
new Action(async () => {
await task;
Console.WriteLine("1");
})();
Console.WriteLine("2");
// Output:
// 1
// 2
```
``` cs
var task = Task.Delay(1); // delay 1ms
new Action(async () => {
await task;
Console.WriteLine("1");
})();
Console.WriteLine("2");
// Output:
// 2
// 1
```
C#的 async 、 await 是这样的,立即可以完成(代码 1 )的,可以同步执行先输出 1 再输出 2 ,需要 1ms 才能完成的(代码 2 ),才必须异步先输出 2 再输出 1 。
C#应该是最早使用 async 、 await 语法糖的语言,之后才被各语言争相效仿(如果有更早的请指正),这种允许同步执行的 await 也被证明设计上没有错误,所以 ES7 如果是强制异步的话,就是设计哲学的问题了。