首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

MCAD 學習筆記:非同步程式設計模式 - 委派 BeginInvoke/EndInvoke 實戰

     編輯:關於ASP.NET

同步 vs 非同步

  • 同步:呼叫阻塞直到完成,簡單但可能導致 UI 凍結或執行緒浪費。
  • 非同步:立即返回,工作執行緒平行處理,適合 I/O 密集型 (Web Service、檔案、資料庫)。

.NET 非同步模式 (APM)

任意委派自動獲得 BeginInvoke/EndInvoke/Invoke 三方法。

核心介面與委派

  • AsyncCallback:非同步完成回呼,參數 IAsyncResult。
  • IAsyncResult:IsCompleted、AsyncWaitHandle、AsyncState、CompletedSynchronously。

BeginInvoke 參數

IAsyncResult BeginInvoke(參數列表, AsyncCallback callback, object state);
  • 立即返回,不阻塞。
  • 回傳 IAsyncResult 供輪詢/等待/回呼使用。

EndInvoke 參數

返回值 EndInvoke(out/ref 參數, IAsyncResult asyncResult);
  • 必須在非同步完成後呼叫 (否則阻塞等待)。
  • 取得傳回值與 out/ref 參數。

三種完成檢測方式

  1. 回呼:callback(ar) => { var result = delegate.EndInvoke(ar); }
  2. 輪詢:while(!ar.IsCompleted) Thread.Sleep(100); var result = delegate.EndInvoke(ar);
  3. 等待控制代碼:ar.AsyncWaitHandle.WaitOne(); var result = delegate.EndInvoke(ar);

注意事項

  • 每個 BeginInvoke **必須**配對 EndInvoke,否則資源洩漏。
  • 例外會在 EndInvoke 重新拋出,務必 try/catch。
  • UI 執行緒不可直接呼叫 EndInvoke 阻塞,應用回呼或 Control.BeginInvoke 切回 UI 執行緒。

總結

委派非同步模式 (APM) 是 .NET 1.x/2.0 核心非同步基石,掌握 Begin/End 配對、回呼與例外處理,是進階非同步程式設計的前提。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved