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