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瀏覽量
13010 -
線程
+關注
關注
0文章
504瀏覽量
19684 -
.NET技術
+關注
關注
0文章
3瀏覽量
5795
發(fā)布評論請先 登錄
相關推薦
評論