S I*_*zik 4 c# program-entry-point async-await
在未完成的任务之前等待将控制权交给调用者,直到任务完成。
当您在 Main() 中使用它时,谁将获得控制权?
public static async Task Main()
{
await F1() ; //This await will pass the control to ???
}
public static async Task F1()
{
await Task.Run(()=>{...}) ; //This await will pass the control to Main()
}
Run Code Online (Sandbox Code Playgroud)
使您的应用程序保持活动状态的主线程有效地是:
private static void TheRealEntryPoint() => Main().GetAwaiter().GetResult();
Run Code Online (Sandbox Code Playgroud)
(这与 大致相同.Wait(),并且是您永远不应该在自己的代码中编写的那种“异步同步”的东西,但是......在这个特定场景中就足够了)
像这样:
Task.Run返回一个未完成的任务await返回给调用者的on,带我们回到Main()await也返回给调用者-所以我们结束了TheRealEntryPointF1,现在可以将自己标记为完成Main,现在可以将自己标记为完成TheRealEntryPoint