异步编程模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步编程模式相关的知识,希望对你有一定的参考价值。

    • 异步编程模型(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);  
}  

以上是关于异步编程模式的主要内容,如果未能解决你的问题,请参考以下文章

响应式编程的实践

基于任务的异步编程模式(TAP)

简单实现异步编程promise模式

使用Task.Wait而不是等待异步编程

javascript异步编程学习及实例

异步编程最佳实践