怎么實現NET網站異步處理?
在架構領域,我們經常聽見別人說“異步”,另外大家在面試中也經常會遇到這方面的問題。
什么是異步?說到.NET異步,先來說幾個比較容易混淆的概念:
1、多線程:一般指同一進程中多個線程協作運行。在多核計算機中多個線程將有機會同時運行于多個核上,如果線程中進行的是計算,則行成并行計算。
2、并行:一般指并行計算,是說同一時刻有多條指令同時被執行,這些指令可能執行于同一CPU的多核上,或者多個CPU上,或者多個物理主機甚至多個網絡中。
3、異步:與同步相對應,是指呼叫另一操作后,不等待其結果,繼續執行之后的操作,若之后沒有其他操作,當前線程將進入睡眠狀態,而CPU時間將有機會切至其他線程。在異步操作完成后通過回調函數的方式獲取通知與結果。
在Web中為什么要使用異步?在 web 應用程序看到大量在啟動時的并發請求或具有突發負載 (其中會增加并發情況突然),進行異步 web 服務調用將增加你的應用程序的響應能力。 異步請求采用相同量的時間來處理與同步請求。
例如,如果某個請求生成 web 服務調用,則需要兩秒鐘來完成,請求所執行的兩秒內是否執行同步或異步。 但是,在異步調用,線程則無需必須等待第一個請求完成時響應其他請求。 因此,異步請求可以防止出現請求排隊和線程池增長時有許多并發請求調用長時間運行的操作。
異步的實現方式異步的實現方式有多種,比如多線程。多線程將異步操作放入另一線程中運行,通過輪詢或回調方法得到完成通知。
多線程實現異步調用可以采用傳統的Thread類來實現,Task來實現以及 async/await 關鍵字實現。
對于Thread來說,當多個異步方法需要協助時,代碼將顯得十分復雜,為此我們需要一個更好的異步模型,從.NET4開始,引入了新的異步模型。下面來看一段代碼:
我們不再關心任務如何去開始,何時會結束,一切變成了一些有關或無關的任務。
對于封裝一個由多個異步方法組合成的異步方法, 組合異步方法調用后,按順序調用第一個異步方法,緊接著,產生需要的結果Task后返回。異步方法完成時回調指定的方法,并按順序繼續調用,所有方法完成后,把運行的最終結果設置給結果Task,那么整個任務即完成。 如果異步方法有返回值,那么組合的異步方法看上去會復雜一點。類似下圖所示:
為了解決這個問題,微軟提供了一個非常好用的語法糖:async/await 關鍵字。下面我們來看一段代碼:
他幾乎和同步方法書寫一致,代碼量也比較少,程序的邏輯也很清晰,當然可讀性更強。
總結關于.NET網站異步處理分享到這里,這里做個總結:
1、.NET網站異步處理可以采用3中方式實現:Thread,Task,async/await;
2、Task出現是為了Thread的不足,async/await出現也是為了彌補Task的不足。大家有沒有發現這個關系就像一條線一樣。其實說到底這些都是多線程技術,底層都是Thread實現,只不過微軟為了代碼的可讀性以及邏輯的清晰性,做了語法糖,從而更加方便開發人員使用。
3、在C#5中,添加了 async/await 關鍵字,使得上面遺留的問題得以解決,而且重點是,用起來非常簡單!
4、NET Framework 4 引入了異步編程概念, ASP.NET 4.5 支持任務, 于是就有了async/await 。
以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區交流 ~ 我是科技領域創作者,十年互聯網從業經驗,歡迎關注我了解更多科技知識!