上次我們說了,要進行多線程編程,我們可以使用最原始的方式也是最靈活的方式進行,那就是 Thread(ThreadPool)+信號量+ 鎖+Control.Invoke。.NET的異步編程模型給我們提供了一種基於 IAsyncResult的編程模式,它尤其適用於處理下面的應用場景:
1) 被阻止,正在等待一個 IAsyncResult
2) 被阻止,正在等待多個 IAsyncResult 對象
3) 輪詢 IAsyncResult 上的完成情形
.NET還提供了基於事件的異步編程模式,它能夠提供:
1) 後台執行耗時任務(例如下載和數據庫操作),但不會中斷應用程序
2) 同時執行多個操作,每個操作完成時都會接到通知
下面是一個符合基於事件的異步編程模式的類:
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; }
}