EAP(Event-based Asynchronous Pattern) 是基于事件的異步模式,在 .NET Framework 2.0 中引入。EAP 需要一個有 Async 后綴方法和一個或多個事件。EAP不再推薦用于新開發。
EAP
一個符合 EAP 模式的示例聲明如下:
BackgroundWorker
BackgroundWorker 是一個典型的 EAP 實現。
程序運行效果:
日志輸出:
從效果和日志上看:
?EAP 不會阻塞調用線程
?異步操作真正執行是在另外一個線程
?RunWorkerCompleted 回調會回到調用線程(UI線程)
和APM比起來很像,好像只是把 委托綁定 放到了外面。我們可以看一下 BackgroundWorker 的源碼:
1.在構造函數里實例化一個委托threadStart
2.調用 RunWorkerAsync() 方法
看起來 EAP 的本質,還是使用了委托的異步方式(BeginInvoke),實質上還是 APM 異步模式。
多任務
如果有多個異步任務,我們希望按照先后順序執行,并且需要在調用線程上得到所有返回值。
運行起來,發現有異常:
由此可見在完成第一個異步操作之前沒有對asyncResult2進行賦值,asyncResult2執行異步等待的時候報異常。也可以有其他方法來解決這個問題,但會比較復雜。
審核編輯:劉清
-
APM
+關注
關注
1文章
71瀏覽量
13008 -
線程
+關注
關注
0文章
504瀏覽量
19675 -
.NET技術
+關注
關注
0文章
3瀏覽量
5795
發布評論請先 登錄
相關推薦
評論