.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);
}
时间: 2024-10-13 04:20:44