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

MAX4507EAP MAX4507EAP - (Maxim Integrated) - 專用 IC

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

評論