簡體   English   中英

async修飾符和await運算符與委托和線程有何不同?

[英]how is async modifier and await operator different from delegates and threading?

例如,在Winform中,當我們同步使用HttpWebRequest時,UI線程將被阻塞,這又會在Internet上請求資源。 在這里,我們可以使用async方法執行該方法,而某些任務的await關鍵字允許用戶即使在請求仍在運行時也可以與winform進行交互。

這甚至可以通過委派來實現,那么異步功能的優點是什么?

異步和等待術語更加簡單,您基本上可以編寫代碼,就像通過添加一些關鍵字來完成同步應用程序一樣。

從MSDN:

通過使用異步編程,可以避免性能瓶頸並增強應用程序的整體響應能力。 但是,用於編寫異步應用程序的傳統技術可能很復雜,從而使其難以編寫,調試和維護。

Visual Studio 2012引入了一種簡化的方法,即異步編程,該方法利用了.NET Framework 4.5和Windows Runtime中的異步支持。 編譯器完成了開發人員過去的艱巨工作,並且您的應用程序保留了類似於同步代碼的邏輯結構。 結果,您只需花費很少的精力即可獲得異步編程的所有優點。

http://msdn.microsoft.com/zh-CN/library/vstudio/hh191443.aspx

我認為最好的優點之一是用更少的代碼行就能更簡潔地理解異步編程模式。 如果您想更清楚地了解它是如何工作的,請查看Jon Skeet回答的以下問題: Task <int>如何成為一個int?

我假設“委托”是指從后台線程調用同步方法。

正如其他人指出的那樣,使用asyncawait可以更輕松地讀取和編寫代碼,但是還有另一個重要的區別。

當您使用同步方法時,調用線程將被阻塞,直到操作完成。

當您從后台線程使用同步方法時,UI線程未被阻止,但后台線程仍然被阻止。

使用異步方法時,不會阻塞任何線程。 這樣可以更有效地利用資源,而對線程池的壓力較小。

暫無
暫無

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

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