EAP(Event-based Asynchronous Pattern) 是基于事件的異步模式,在 .NET Framework 2.0 中引入。EAP 需要一個(gè)有 Async 后綴方法和一個(gè)或多個(gè)事件。EAP不再推薦用于新開(kāi)發(fā)。
EAP
一個(gè)符合 EAP 模式的示例聲明如下:
BackgroundWorker
BackgroundWorker 是一個(gè)典型的 EAP 實(shí)現(xiàn)。
程序運(yùn)行效果:
日志輸出:
從效果和日志上看:
?EAP 不會(huì)阻塞調(diào)用線程
?異步操作真正執(zhí)行是在另外一個(gè)線程
?RunWorkerCompleted 回調(diào)會(huì)回到調(diào)用線程(UI線程)
和APM比起來(lái)很像,好像只是把 委托綁定 放到了外面。我們可以看一下 BackgroundWorker 的源碼:
1.在構(gòu)造函數(shù)里實(shí)例化一個(gè)委托threadStart
2.調(diào)用 RunWorkerAsync() 方法
看起來(lái) EAP 的本質(zhì),還是使用了委托的異步方式(BeginInvoke),實(shí)質(zhì)上還是 APM 異步模式。
多任務(wù)
如果有多個(gè)異步任務(wù),我們希望按照先后順序執(zhí)行,并且需要在調(diào)用線程上得到所有返回值。
運(yùn)行起來(lái),發(fā)現(xiàn)有異常:
由此可見(jiàn)在完成第一個(gè)異步操作之前沒(méi)有對(duì)asyncResult2進(jìn)行賦值,asyncResult2執(zhí)行異步等待的時(shí)候報(bào)異常。也可以有其他方法來(lái)解決這個(gè)問(wèn)題,但會(huì)比較復(fù)雜。
審核編輯:劉清
-
APM
+關(guān)注
關(guān)注
1文章
72瀏覽量
13243 -
線程
+關(guān)注
關(guān)注
0文章
507瀏覽量
20041 -
.NET技術(shù)
+關(guān)注
關(guān)注
0文章
3瀏覽量
5795
發(fā)布評(píng)論請(qǐng)先 登錄
有沒(méi)有辦法或示例來(lái)編寫一個(gè)函數(shù)來(lái)檢查CAN硬件的接收緩沖區(qū)并以更符合RTOS的輪詢方式提取任何新消息?
使用TLSV1.2返回EAP的無(wú)效安全性密鑰
CE認(rèn)證中的DOC符合性聲明是什么意思?
求使用EAP協(xié)議的Arduino代碼示例
介紹一種基于任務(wù)的異步模式TAP
MAX4507EAP+ MAX4507EAP+ - (Maxim Integrated) - 專用 IC

MAX4507EAP MAX4507EAP - (Maxim Integrated) - 專用 IC

MAX4507EAP+T MAX4507EAP+T - (Maxim Integrated) - 專用 IC

RX23W 模塊目標(biāo)板 中國(guó) RoHS Rev.1.00 符合性聲明

RX23W 模塊目標(biāo)板 中國(guó) RoHS Rev.1.00 符合性聲明

評(píng)論