【FastReport教程】介紹C#中的異步編程(上)
【下載FastReport.Net最新版本】
很多人都聽(tīng)說(shuō)過(guò)這個(gè),但是很少有人在他們的代碼中使用它。同時(shí),沒(méi)有具有客戶端 - 服務(wù)器架構(gòu)的嚴(yán)肅程序?qū)o(wú)需異步編程。與數(shù)據(jù)庫(kù)交換數(shù)據(jù),客戶端和服務(wù)器的交互 - 這需要時(shí)間,可以由其他進(jìn)程占用而不是等待。
當(dāng)同步執(zhí)行操作時(shí),該線程被另一個(gè)線程阻塞。我們必須等待第二個(gè)過(guò)程的執(zhí)行才能將控制權(quán)返回給第一個(gè)過(guò)程。這會(huì)導(dǎo)致不必要的資源浪費(fèi),因?yàn)榫哂袉蝹€(gè)任務(wù)的流可以等待很長(zhǎng)時(shí)間來(lái)響應(yīng)。例如,從數(shù)據(jù)庫(kù)或Web服務(wù)。
如果臨時(shí)資源可以節(jié)省多線程(現(xiàn)代處理器的好處允許它),那么內(nèi)存資源將無(wú)法保存它。畢竟,實(shí)際上,多線程也是同步執(zhí)行的操作。只是他們很少。 真正的解決方案是使用異步處理。通過(guò)這種方法,我們可以使用多個(gè)線程來(lái)控制其中一個(gè)。 也就是說(shuō),在等待來(lái)自另一個(gè)任務(wù)的響應(yīng)時(shí),當(dāng)前的任務(wù)不會(huì)阻塞該線程,而是將其提供給另一個(gè)任務(wù)。
我們來(lái)看看圖片:
在這種情況下,使用單線程異步方法。 這里是一個(gè)多線程異步流。
每個(gè)線程執(zhí)行許多任務(wù)。當(dāng)其中一個(gè)任務(wù)在預(yù)期中停止時(shí),將采取另一個(gè)任務(wù)。因此,任務(wù)從一個(gè)線程流向另一個(gè)線程,具體取決于首先釋放的線程。該圖顯示任務(wù)1在第一個(gè)線程中開始執(zhí)行,在第二個(gè)線程中完成。 讓我們?cè)倏紤]一個(gè)圖 - 序列圖:
該圖描述了客戶端 - 服務(wù)器應(yīng)用程序的線程行為。客戶端從服務(wù)器發(fā)送數(shù)據(jù)請(qǐng)求,而不是“掛起”等待響應(yīng)(如在同步方法中)繼續(xù)工作,為用戶提供另一個(gè)應(yīng)用程序功能。因此,如果您是一名Web開發(fā)人員,那么沒(méi)有異步就無(wú)法做任何事情。 讓我們理解一點(diǎn)。異步編程有三種模式:
- 異步編程模型(APM)
- 基于事件的異步模式(EAP)
- 基于任務(wù)的異步模式(TAP)