[英]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.