删除等待不会反映执行后的下一行代码

时间:2018-10-26 14:09:14

标签: c#

据我所知,异步方法中是否没有await关键字,然后方法继续运行而不等待任务,因此删除await关键字应采取措施继续操作,并立即在控制台中显示Boom消息,而不是等待Run方法完成。不过,当我在Main移除等待状态时:

await new Runner().Run(date); 

word 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());
       }
     }
}

2 个答案:

答案 0 :(得分:0)

不等待它仍然运行该方法,只是不等待它完成才继续。等待时,您要告诉它不要继续使用您所使用的方法,直到完成等待的任务。如果调用它,则不等待不会停止该方法的运行。

答案 1 :(得分:-1)

对此行为的唯一解释是SomeFunction实际上不是异步的。它显然正在同步运行,并且似乎在完成时返回已经完成的Task。如果要返回Task,则不应这样做,它应该明确地是一个同步方法并直接返回结果,或者实际上是异步地执行其工作,因此您应将此行为视为错误。方法。