上次我们说了,要进行多线程编程,我们可以使用最原始的方式也是最灵活的方式进行,那就是 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; }
}