首页 > 解决方案 > 删除 await 不会反映执行后的下一个代码行

问题描述

据我所知,如果 async 方法中没有 await 关键字,那么方法会在不等待 Task 的情况下继续,因此删除 await 关键字应该继续并Boom立即在控制台中显示消息,而不是等待 Run 方法完成。然而,当我在这里删除 Main 中的 await 时:

await new Runner().Run(date); 

运行完成后,Boom 字样仍会等待并显示在控制台中。谁能解释一下?我知道,因为在 SomeFunction 中存在与数据库的连接,该连接尝试连接并在几秒钟后向控制台提供错误,我总是首先看到错误,然后到达该行 Boom 之后。

public static async Task Main()
{
    Task aa = new Runner().Run(date);
    Console.WriteLine("Boom");
}

class Runner
{
    public async Task Run(DateTime date)
    {
       try
       {          
          Console.WriteLine("Runner runs");
          await SomeFunction();
       }
       catch (Exception e)
       {
          Console.WriteLine(e.ToString());
       }
     }
}

标签: c#

解决方案


没有等待它仍然运行该方法,它只是不等待它完成再继续。当您等待时,您是在告诉它在等待的任务完成之前不要继续使用您所在的方法。如果您调用它,不等待不会停止该方法的运行。


推荐阅读