c# - 删除 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());
}
}
}
解决方案
没有等待它仍然运行该方法,它只是不等待它完成再继续。当您等待时,您是在告诉它在等待的任务完成之前不要继续使用您所在的方法。如果您调用它,不等待不会停止该方法的运行。