簡體   English   中英

為什么不使用同步方法而不是等待異步任務?

[英]Why not use a sync method instead of await Async task?

異步方法:

public void Main(){
    await Asynctask1;
    DoSomething();
}

public async Task AsyncTask1(){
    //Async logic here
}

同步方法:

public void Main(){
    SyncMethod1();
    DoSomething();
}

我想我在這里遺漏了一些東西。 假設SyncMethod1()Asynctask1()都做同樣的事情,這兩個構造到底是不是結果相同,即DoSomething()在方法完成之前不會啟動?

即DoSomething()直到方法完成之前才開始?

異步順序之間存在差異。 當您總是立即await異步方法時,最終會得到異步順序代碼,乍一看它的行為似乎與同步順序代碼類似。 (另一方面,這種相似性是async / await關鍵字的全部要點)。 但是,有一個重要的區別。

假設操作是一些I / O事情,比如獲取HTTP資源。 SyncMethod1將同步執行HTTP get; 也就是說,它發出HTTP請求然后阻塞線程,直到它獲得HTTP響應。 AsyncTask1將異步執行HTTP get; 也就是說,它發出HTTP請求,然后返回一個不完整的Task 稍后,當HTTP請求進入時, AsyncTask1方法將恢復並完成返回的Task ,以及運行await后的代碼(即DoSomething )。

異步方式更復雜,但有一個關鍵優勢:它不會阻塞線程。 因此,釋放UI線程以啟用響應式UI,並釋放ASP.NET線程以處理其他請求。

我在我的博客上有一個async介紹 ,可以幫助您學習。

在你概述的情況下,沒有實際的區別,因為你暫時等待異步方法完成,然后繼續下一步。

但是,如果您重新構建類似這樣的代碼,您可能會意識到異步編程的強大功能:

public async void Main() {
    Task performTask = AsyncTask1();
    //This method can continue without having to wait for AsyncTask1 to complete
    DoSomething();
    //Here we await the AsyncTask1 because perhaps other code further 
    //down is depending on it
    await performTask;
}

暫無
暫無

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

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