任意委派自動獲得 BeginInvoke/EndInvoke/Invoke 三方法。
AsyncCallback:非同步完成回呼,參數 IAsyncResult。IAsyncResult:IsCompleted、AsyncWaitHandle、AsyncState、CompletedSynchronously。IAsyncResult BeginInvoke(參數列表, AsyncCallback callback, object state);
IAsyncResult 供輪詢/等待/回呼使用。返回值 EndInvoke(out/ref 參數, IAsyncResult asyncResult);
out/ref 參數。callback(ar) => { var result = delegate.EndInvoke(ar); }while(!ar.IsCompleted) Thread.Sleep(100); var result = delegate.EndInvoke(ar);ar.AsyncWaitHandle.WaitOne(); var result = delegate.EndInvoke(ar);BeginInvoke **必須**配對 EndInvoke,否則資源洩漏。EndInvoke 重新拋出,務必 try/catch。EndInvoke 阻塞,應用回呼或 Control.BeginInvoke 切回 UI 執行緒。委派非同步模式 (APM) 是 .NET 1.x/2.0 核心非同步基石,掌握 Begin/End 配對、回呼與例外處理,是進階非同步程式設計的前提。