前文介紹了最原始的 Thread + 信號量 + 鎖 + Control.Invoke 組合。.NET 提供基於 IAsyncResult 的異步編程模型(APM),特別適合以下場景:
IAsyncResultIAsyncResult 物件IAsyncResult 完成狀態.NET 另提供基於事件的異步模式(EAP),特點:
public class AsyncExample
{
public int Method1(string param);
public void Method2(double param);
public void Method1Async(string param);
public void Method1Async(string param, object userState);
public event Method1CompletedEventHandler Method1Completed;
public void Method2Async(double param);
public void Method2Async(double param, object userState);
public event Method2CompletedEventHandler Method2Completed;
public void CancelAsync(object userState);
public bool IsBusy { get; }
}
此模式以 MethodXAsync 啟動非同步操作,MethodXCompleted 事件回報結果,CancelAsync 支援取消,IsBusy 指示是否忙碌。