簡體   English   中英

刪除等待不會反映執行后的下一行代碼

[英]Removing await doesn't reflect next code lines after to execute

據我所知,如果異步方法中沒有await關鍵字,那么該方法將繼續運行而無需等待任務,因此刪除await關鍵字應繼續執行並立即在控制台中顯示Boom消息,而無需等待Run方法的完成。 但是,當我在Main移除等待狀態時:

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

如果不等待,它仍然會運行該方法,只是不等待它完成才繼續。 等待時,您要告訴它不要繼續使用您所使用的方法,直到完成等待的任務。 如果調用它,則不等待不會停止該方法的運行。

對此行為的唯一解釋是SomeFunction實際上不是異步的。 它顯然正在同步運行,並且似乎在完成時返回已完成的Task 如果要返回Task ,則不應該這樣做,它要么明顯是一個同步方法並直接返回結果,要么實際上是異步地執行其工作,而您應將此行為視為該方法中的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM