http://msdn.microsoft.com/zh-cn/library/jj152938(v=vs.110).aspx
.NET Framework 提供了执行异步操作的三种模式
1.异步编程模型 (APM) 模式(也称 IAsyncResult 模式),在此模式中异步操作需要 Begin 和 End 方法(比如用于异步写入操作的 BeginWrite 和 EndWrite)。 对于新的开发工作不再建议采用此模式。
http://msdn.microsoft.com/zh-cn/library/ms228963(v=vs.110).aspx
2.基于事件的异步模式 (EAP),这种模式需要 Async 后缀,也需要一个或多个事件、事件处理程序委托类型和 EventArg 派生类型。 EAP 是在 .NET Framework 2.0 中引入的。 对于新的开发工作不再建议采用此模式。
http://msdn.microsoft.com/zh-cn/library/ms228969(v=vs.110).aspx
3.基于任务的异步模式 (TAP) 使用一种方法来表示异步操作的启动和完成。 TAP 是在 .NET Framework 4 中引入的,并且它是在 .NET Framework 中进行异步编程的推荐使用方法。 C# 中的 async 和 await 关键词以及 Visual Basic 语言中的 Async 和 Await 运算符为 TAP 添加了语言支持。
http://msdn.microsoft.com/zh-cn/library/hh873175(v=vs.110).aspx
比较三种异步编程模式
为了快速比较这三种模式的异步操作方式,请考虑使用从指定偏移量处起将指定量数据读取到提供的缓冲区中的Read方法:
class MyClass { /// <summary> /// a Read method that reads a specified amount of data into a provided buffer starting at a specified offset /// 从buffer字节数组中的第offset位置开始,向后读取count个字节 /// </summary> /// <param name="buffer">源数组数组</param> /// <param name="offfset">读取的起始位置(从0开始的偏移量)</param> /// <param name="count">读取几个字节</param> /// <returns></returns> public int Read(byte[] buffer, int offfset, int count) { return 0; } }
APM
abstract class APM { //public delegate void AsyncCallback(IAsyncResult ar); //AsyncCallback是委托 public abstract IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callBack, object state); public abstract int EndRead(IAsyncResult asyncResult); }
EAP
public delegate void ReadCompletedEventHandler(); abstract class EAP { public abstract void ReadAsync(byte[] buffer, int offset, int count); public event ReadCompletedEventHandler ReadCompleted;//ReadCompletedEventHandler }
TAP
abstract class TAP { public abstract Task<int> ReadAstnc(byte[] buffer, int offset, int count); }