返回介绍

异步编程模式

发布于 2025-02-23 23:15:46 字数 2098 浏览 0 评论 0 收藏 0

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

  • 异步编程模型 (APM) 模式(也称 IAsyncResult 模式),在此模式中异步操作需要 BeginEnd 方法(比如用于异步写入操作的 BeginWriteEndWrite )。 不建议新的开发使用此模式。 有关详细信息,请参阅 异步编程模型 (APM) 。
  • 基于事件的异步模式 (EAP),这种模式需要 Async 后缀,也需要一个或多个事件、事件处理程序委托类型和 EventArg 派生类型。 EAP 是在 .NET Framework 2.0 中引入的。 不建议新的开发使用这种模式。 有关详细信息,请参阅 基于事件的异步模式 (EAP) 。
  • 基于任务的异步模式 (TAP) 使用一种方法来表示异步操作的启动和完成。 TAP 是在 .NET Framework 4 中引入的,并且它是在 .NET Framework 中进行异步编程的推荐使用方法。 C# 中的 async 和 await 关键词以及 Visual Basic 语言中的 Async 和 Await 运算符为 TAP 添加了语言支持。 有关详细信息,请参阅 基于任务的异步模式 (TAP) 。

比较模式

为了快速比较这三种模式的异步操作方式,请考虑使用从指定偏移量处起将指定量数据读取到提供的缓冲区中的 Read 方法:

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

此方法对应的 APM 将公开 BeginReadEndRead 方法:

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

对应的 EAP 将公开以下类型和成员的集:

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

对应的 TAP 将公开以下单个 ReadAsync 方法:

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

为了全面讨论 TAP、APM 和 EAP,请参阅下一节中提供的链接。

相关主题

标题描述
异步编程模型 (APM)描述使用 IAsyncResult 接口提供异步行为的旧模型。 不建议新的开发使用此模型。
基于事件的异步模式 (EAP)描述提供异步行为的基于事件的旧模型。 不建议新的开发使用此模型。
基于任务的异步模式 (TAP)描述基于 System.Threading.Tasks 命名空间的新异步模式。 此模型是在 .NET Framework 4 及更高版本中进行异步编程的推荐使用方法。

请参阅

C# 中的异步编程
F# 中的异步编程
使用 Async 和 Await 的异步编程 (Visual Basic)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文