C# 在主方法中等待-在任务完成之前谁获得控制权?
在未完成的任务将控件传递给调用方之前等待,直到任务完成 当您在Main()中使用它时,谁将获得该控件C# 在主方法中等待-在任务完成之前谁获得控制权?,c#,async-await,main,C#,Async Await,Main,在未完成的任务将控件传递给调用方之前等待,直到任务完成 当您在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
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()
}
使应用程序保持活动状态的主要线程是:
private static void thealentrypoint()=>Main().GetAwaiter().GetResult();
(这与.Wait()
大致相同,是一种“异步同步”的东西,您永远不应该在自己的代码中编写,但是……这在这个特定场景中就足够了)
因此:
返回一个未完成的任务Task.Run
- 因此,
返回调用者,将我们带回wait
Main()
- 在未完成状态下,
也返回到调用者-因此我们最终进入wait
TheAlentryPoint
- 其中主线程只是阻塞
- 在某个时刻,线程池将拾取工作项并运行它
- 将任务标记为已完成
- 重新激活F1,现在可以将自身标记为完成
- 重新激活
,现在可以将自身标记为完成Main
- 这将解锁卡在alentryPoint中的主线程
- 允许exe终止
Main
——编译器可以将它喜欢的任何东西标记为入口点。在一个本地测试中,它实际上被称为()
(带尖括号),这使得它在常规C语言中不可发音#