时间:2016-02-16 02:50 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【.NET中的异步编程-EAP/APM使用方法及案例介绍】,下面是详细的讲解!
.NET中的异步编程-EAP/APM使用方法及案例介绍
从.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 是新开发的建议异步设计模式,之后再讨论。
先总结一下旧有的2种模式:EAP、APM。
从以下几个方面,看这2种异步编程方式的异同:
•命名、参数、返回值
•典型应用
•捕获异常
•状态
•取消操作
•进度报告
EAP
命名、参数、返回值
EAP的编程模式的代码命名有以下特点:
•将有一个或多个名为 “[方法名称]Async” 的方法。这些方法可能会创建同步版本的镜像,这些同步版本会在当前线程上执行相同的操作。
•该类还可能有一个 “[方法名称]Completed” 事件,监听异步方法的结果。
•它可能会有一个 “[方法名称]AsyncCancel”(或只是 CancelAsync)方法,用于取消正在进行的异步操作。
参数和返回值都没有特殊规定,按照业务需求而定
典型应用
以请求一个Url为例
捕获异常
异常信息一般在Completed的事件参数中传递的。紧接上面的例子,如果需要获取返回的异常信息,则需要改写一下DownloadStringComleted的方法。
状态
EAP本身并没有维护状态,如果需要的话,应该设置不同的时间响应不同的状态改变;
假设刚才的DownloadStringAsync,需要增加多几个状态值,可以考虑增加多几个事件。
如
Event DownloadStringStarted(响应下载刚开始)
Event DownloadStringPending(响应下载阻塞中)
Event DownloadStringCancel(响应下载取消时)
等等。
取消操作
按命名规范,如果操作对应有“[方法名称]AsyncCancel”(或只是 CancelAsync)方法,则支持取消操作。
取消的状态捕获,还是以刚才的下载Url输出html为例,还是在DownloadStringCompleted 获取取消与否的状态。DownloadStringCompletedEventArgs. Cancelled
注意的是,如果用户执行了CancelAsync后,在DownloadStringCompletedEventArgs.Error就会获取到对应的异常,此时不要再取DownloadStringCompletedEventArgs.Result。
进度报告
EAP没有硬性规定说要支持进度报告,但可以很顺其自然地通过时间响应进度变化。
以当前例子,WebClient 就提供了DownloadProgressChanged 做进度变化的响应事件。
APM
命名、参数、返回值
APM的编程模式的代码命名有以下特点:
•使用 IAsyncResult 设计模式的异步操作是通过名为[Begin操作名称] 和 [End操作名称] 的两个方法来实现的,这两个方法分别开始和结束异步操作 操作名称。 例如,FileStream 类提供 BeginRead 和 EndRead 方法来从文件异步读取字节。 这两个方法实现了 Read 方法的异步版本。
•在调用 [Begin操作名称] 后,应用程序可以继续在调用线程上执行指令,同时异步操作在另一个线程上执行。 每次调用 [Begin操作名称] 时,应用程序还应调用 [End操作名称] 来获取操作的结果。
典型应用
以请求一个Url为例
委托的异步调用也用的是APM模式,这个方式的强大之处,在于可以使任何方法编程异步调用。
捕获异常
异常信息要在[End操作名称]中获取。
状态和取消操作、进度报告
APM模式本身不支持状态多样化和取消操作、进度报告。
关于.NET中的异步编程-EAP/APM使用方法及案例介绍的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【增加记录】asp.net中获取新增加记录的ID Access
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
