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