据我所知,异步方法中是否没有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());
}
}
}
答案 0 :(得分:0)
不等待它仍然运行该方法,只是不等待它完成才继续。等待时,您要告诉它不要继续使用您所使用的方法,直到完成等待的任务。如果调用它,则不等待不会停止该方法的运行。
答案 1 :(得分:-1)
对此行为的唯一解释是SomeFunction
实际上不是异步的。它显然正在同步运行,并且似乎在完成时返回已经完成的Task
。如果要返回Task
,则不应这样做,它应该明确地是一个同步方法并直接返回结果,或者实际上是异步地执行其工作,因此您应将此行为视为错误。方法。