入口点不能标记为异步,为什么?

时间:2014-03-22 06:22:42

标签: c# .net asynchronous task-parallel-library async-await

有谁知道为什么不能将Main标记为异步?

我过去一直在设计编译器作为案例研究,但我真的无法理解为什么不将Main设为异步?

1 个答案:

答案 0 :(得分:3)

在C#中,async关键字基本上只允许您在代码中使用“await”关键字。如果没有等待,它只是同步执行。

如果有一个await关键字,则该方法将阻塞,直到“等待”功能完成,并将控制返回给调用者。但是,使用入口点函数没有调用者(运行时除外,但你不会将控制返回给它),所以使用await关键字并没有任何意义。

由于您不会在入口点函数中使用“await”,因此没有理由将其标记为异步。 C#恰好强制执行此操作。

简短的回答是,你的入口点函数应该总是同步执行,因为它“是”你的程序(当然还有其他部分,但它们最终都以入口点开始和结束),所以async / await是不允许的。

MSDN async / await的参考。