首页 > 代码库 > 异步编程模式

异步编程模式

.NET Framework 提供了三种异步操作模式:

    • 异步编程模型(APM) 模式(也叫 IAsyncResult 模式),这些异步操作需要 Begin和End 方法(例如用于写操作的 BeginWrite 和EndWrite )。这种模式已经不推荐在新项目中使用。更多信息参考: 异步编程模型 (APM)。

    • 基于事件的异步模式 (EAP),这种模式的方法带有Async 后辍,并需要一个或多个事件,事件处理的委托类型以及 EventArg-驱动的类型。EAP 自 .NET Framework 2.0 引入,这种模式已经不推荐在新项目中使用。 更多信息参考:基于事件的异步模式 (EAP).

    • 基于任务的异步模式 (TAP),这种模式使用单个方法表示初始化及异步操作的完成. TAP自 .NET Framework 4 引入且是.NET Framework中推荐的异步操作方法。C#中 async 与 await 关键字和VB中 Async 与 Await 操作用于支持 TAP。 更多信息参考: 基于任务的异步模式 (TAP)。

模式比较

通过一个Read方法读取指定数量数据到一个缓冲的指定位置,可以快速的比较这三种异步模式的不同之处:

C#
public class MyClass  {      public int Read(byte [] buffer, int offset, int count);  }  

APM 中公开出来相对应的方法是 BeginRead 和 EndRead 方法:

C#
public class MyClass  {      public IAsyncResult BeginRead(          byte [] buffer, int offset, int count,           AsyncCallback callback, object state);      public int EndRead(IAsyncResult asyncResult);  }  

EAP 中公开出来相对应的是一组类型与其成员:

C#
public class MyClass  {      public void ReadAsync(byte [] buffer, int offset, int count);      public event ReadCompletedEventHandler ReadCompleted;  }  

TAP  中公开出来相对应是单个 ReadAsync 方法:

C#
public class MyClass  {      public Task<int> ReadAsync(byte [] buffer, int offset, int count);  }  

异步编程模式