异步编程模式

.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

异步编程模式的相关文章

.NET &ldquo;底层&rdquo;异步编程模式&mdash;&mdash;异步编程模型

本文内容 异步编程类型 环境 异步编程模型(APM) 参考资料 首先澄清,异步编程模式(Asynchronous Programming Patterns)与异步编程模型(Asynchronous Programming Model,APM),它们的中文翻译只差一个字,英文名称差在最后一个单词,看英文一个是 Pattern,一个是 Model.Model 比 Pattern 更具体.前者是一个统称,比后者含义要广,前者包含三个模型,而 APM 只是它其中一个而已. 个人理解,异步编程模型(APM

基于任务的异步编程模式,Task-based Asynchronous Pattern

术语: APM           异步编程模型,Asynchronous Programming Model EAP           基于事件的异步编程模式,Event-based Asynchronous Pattern TAP           基于任务的异步编程模式,Task-based Asynchronous Pattern

[.net 多线程]异步编程模式

从.NET 4.5开始,支持的三种异步编程模式: 基于事件的异步编程设计模式 (EAP,Event-based Asynchronous Pattern) 异步编程模型(APM,Asynchronous Programming Model) 基于任务的编程模型(TAP,Task-based Asynchronous Pattern) 基于任务的异步模式 (TAP) 是基于 System.Threading.Tasks 命名空间的 Task 和 Task<TResult>,用于表示任意异步操作.

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

异步编程是C#5.0的一个重要改进,提供两个关键字:async和await.使用异步编程,方法的调用是在后台运行(通常在线程或任务的帮助下),但不会阻塞调用线程.异步模式分为3种:异步模式.基于事件的异步模式和基于任务的异步模式(TAP).TAP是利用关键字async和await实现的,本文将讲解TAP模式.async和await关键字只是编译器的功能.编译器最终会用Task类创建代码. 1.创建任务 建立一个同步方法Greeting,该方法在等待一段时间后,返回一个字符串. private s

C#多线程和异步(三)——一些异步编程模式

一.任务并行库 任务并行库(Task Parellel Library)是BCL中的一个类库,极大地简化了并行编程,这里以Parallel.For和Parallel.ForEach为例.在C#中for/foreach循环使用十分普遍,如果迭代不依赖与上次迭代的结果时,把迭代放在 不同的处理器上并行处理 将很大地提高运行效率,Parallel.For和Parallel.ForEach就是为这个目的而设计的. 一个栗子: 1 static void Main(string[] args) 2 { 3

异步编程(二)基于事件的异步编程模式 (EAP)

一.引言 在上一个专题中为大家介绍了.NET 1.0中提出来的异步编程模式--APM,虽然APM为我们实现异步编程提供了一定的支持,同时它也存在着一些明显的问题--不支持对异步操作的取消和没有提供对进度报告的功能,对于有界面的应用程序来说,进度报告和取消操作的支持也是必不可少的,既然存在这样的问题,微软当然也应该提供给我们解决问题的方案了,所以微软在.NET 2.0的时候就为我们提供了一个新的异步编程模型,也就是我这个专题中介绍的基于事件的异步编程模型--EAP. 实现了基于事件的异步模式的类将

基于事件的异步编程模式(EAP)

一.引言 在上一个专题中为大家介绍了.NET 1.0中提出来的异步编程模式--APM,虽然APM为我们实现异步编程提供了一定的支持,同时它也存在着一些明显的问题--不支持对异步操作的取消和没有提供对进度报告的功能,对于有界面的应用程序来说,进度报告和取消操作的支持也是必不可少的,既然存在这样的问题,微软当然也应该提供给我们解决问题的方案了,所以微软在.NET 2.0的时候就为我们提供了一个新的异步编程模型,也就是我这个专题中介绍的基于事件的异步编程模型--EAP. 二.介绍 实现了基于事件的异步

在JavaScript中实现异步编程模式的方法

本文总结了”异步模式”编程的4种方法,理解它们可以让你写出结构更合理.性能更出色.维护更方便的Javascript程序. 一.回调函数 这是异步编程最基本的方法. 假定有两个函数f1和f2,后者等待前者的执行结果. f1(); f2(); 如果f1是一个很耗时的任务,可以考虑改写f1,把f2写成f1的回调函数. function f1(callback){ setTimeout(function () { // f1的任务代码 callback(); }, 1000); } 执行代码就变成下面这

[C#学习笔记之异步编程模式2]BeginInvoke和EndInvoke方法 (转载)

为什么要进行异步回调?众所周知,普通方法运行,是单线程的,如果中途有大型操作(如:读取大文件,大批量操作数据库,网络传输等),都会导致方法阻塞,表现在界面上就是,程序卡或者死掉,界面元素不动了,不响应了.异步方法很好的解决了这些问题,异步执行某个方法,程序立即开辟一个新线程去运行你的方法,主线程包括界面就不会死掉了.异步调用并不是要减少线程的开销, 它的主要目的是让调用方法的主线程不需要同步等待在这个函数调用上, 从而可以让主线程继续执行它下面的代码. BeginInvoke方法可以使用线程异步