(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小總結)
讓我們來看看同步異步的區別:
同步方法調用在程序繼續執行之前需要等待同步方法執行完畢返回結果
異步方法則在被調用之後立即返回以便程序在被調用方法完成其任務的同時執行其它操作
.NET框架基類庫中有好幾種類都可以提供同步和異步的方法調用。
因為同步方法調用會導致程序流程中途等待,所以采用同步方法的情況下往往會導致程序執行的延遲
相比來說,在某些條件下選擇異步方法調用就可能更好一些
例如,有的時候程序需要給多個Web服務發出請求,還有遠程處理信道(HTTP、TCP)和代理,這時就最好采用異步方法
.NET Framework允許異步調用任何方法,定義與需要調用的方法具有相同簽名的委托
CLR將自動為該委托定義添加適當簽名的BeginInvoke虛方法和EndInvoke虛方法和Invoke方法。
關於委托的這3個方法的詳細說明可以參考這文章
http://www.cnblogs.com/aierong/archive/2005/05/25/162181.html
我們先來了解這2個方法和一個委托和一個接口:
(1)
BeginInvoke方法用於啟動異步調用
它與您需要異步執行的方法具有相同的參數,只不過還有兩個額外的參數,將 AsyncCallback 和 AsyncState(可通過 IAsyncResult 接口的
AsyncState 屬性獲得)作為最後兩個參數,如沒有可以為空.
BeginInvoke立即返回,不等待異步調用完成。
BeginInvoke返回IasyncResult,可用於監視調用進度。
結果對象IAsyncResult是從開始操作返回的,並且可用於獲取有關異步開始操作是否已完成的狀態。
結果對象被傳遞到結束操作,該操作返回調用的最終返回值。
在開始操作中可以提供可選的回調。如果提供回調,在調用結束後,將調用該回調;並且回調中的代碼可以調用結束操作。
(2)
EndInvoke方法用於檢索異步調用結果。
在調用BeginInvoke後可隨時調用EndInvoke方法,注意:始終在異步調用完成後調用EndInvoke.
如果異步調用未完成,EndInvoke將一直阻塞到異步調用完成。
EndInvoke的參數包括需要異步執行的方法的out和ref參數以及由BeginInvoke返回的IAsyncResult。
要注意的是,始終在異步調用完成後調用EndInvoke