异步编程水很深,先从概念入手吧
异步编程首先分成两类:
APM(Asynchronous Programming Model)
EAP(Event-based Asynchronous Pattern)
APM:
使用委托可以通过异步方式调用同步方法。 当同步调用一个委托时,Invoke 方法直接对当前线程调用目标方法。 如果调用 BeginInvoke 方法,则公共语言运行时 (CLR) 会对请求进行排队并立即返回到调用方。 会对来自线程池的线程异步调用目标方法。 提交请求的原始线程自由地继续与目标方法并行执行。 如果在对 BeginInvoke 方法的调用中指定了回调方法,则当目标方法结束时将调用该回调方法。 在回调方法中,EndInvoke 方法获取返回值和所有输入/输出参数或仅供输出参数。 如果在调用 BeginInvoke 时未指定任何回调方法,则可以从调用 BeginInvoke 的线程中调用 EndInvoke。 (引自: http://msdn.microsoft.com/zh-cn/library/22t547yb.aspx)
EAP:
基于事件的异步模式可以采用多种形式,具体取决于某个特定类支持的操作的复杂程度。 最简单的类可能只有一个方法名称Async 方法和一个对应的方法名称Completed 事件。 更复杂的类可能有若干个方法名称Async 方法(每种方法都有一个对应的方法名称Completed 事件),以及这些方法的同步版本。 这些类分别支持各种异步方法的取消、进度报告和增量结果。
异步方法可能还支持多个挂起的调用(多个并发调用),允许您的代码在此方法完成其他挂起的操作之前调用此方法任意多次。 若要正确处理此种情况,必须让您的应用程序能够跟踪各个操作的完成。(引自:http://msdn.microsoft.com/zh-cn/library/wewwczdw.aspx)
这是关于.net下的 两种最基本的异步模式, 当然,还有会其它一些异步操作的方法模型,万变不离其宗,都是从这两种模式上发展起来的或对他们的一种补充。