时间:2016-02-16 01:44 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【.NET中基于事件的异步模式-EAP】,下面是详细的讲解!
.NET中基于事件的异步模式-EAP
前言在C# 5.0中,新增了async await 2个关键字支持异步编程的操作。在讲述这两个关键字之前,我先总结一下.NET中的常见的异步编程模型。
异步编程一直是比较复杂的问题,其中要处理多线程之间的数据同步、获取进度、可取消、获取结果、不影响主线程操作、多个任务之间互相不影响等,因此需要设计编程模型去处理此类问题。
从.NET 4.5开始,支持的三种异步编程模式:
基于事件的异步编程设计模式 (EAP,Event-based Asynchronous Pattern)
异步编程模型(APE,Asynchronous Programming Model)
基于任务的编程模型(TAP,Task-based Asynchronous Pattern)
目前新版的.NET是偏向于建议使用TAP方式进行异步编程,WINRT中的异步操作就只有TAP的身影,async await关键字也只是支持TAP的编程模型。
基于事件的异步模式 - EAP
EAP的编程模式的代码有以下特点:
将有一个或多个名为 “[方法名称]Async” 的方法。这些方法可能会创建同步版本的镜像,这些同步版本会在当前线程上执行相同的操作。
该类还可能有一个 “[方法名称]Completed” 事件,监听异步方法的结果。
它可能会有一个 “[方法名称]AsyncCancel”(或只是 CancelAsync)方法,用于取消正在进行的异步操作。
下面是一个符合此模式的类声明示例
这里虚构的 AsyncExample 类有两个方法,都支持同步和异步调用。同步重载的行为类似于方法调用,它们对调用线程执行操作;如果操作很耗时,则调用的返回可能会有明显的延迟。异步重载将在另一个线程上启动操作,然后立即返回,允许在调用线程继续执行的同时让操作“在后台”执行。
System.Net.WebClient 本身就有很多EAP的例子,以它的DownloadString为例,WebClient中跟DownloadString相关的方法有:
DownloadString:同步下载字符串资源的方法,此方法阻塞当前线程。
DownloadStringAsync:使用EAP异步编程模式下载字符串资源的方法,此方法不会阻塞当前线程。
DownloadStringCompleted:响应异步下载时完成的事件。
DownloadProgressChanged:响应异步下载时进度变化。
调用模型示例如下:
运行结果:
2012-12-28 00:39:39:621 AsyncRun:start
2012-12-28 00:39:40:377 AsyncRun:download_start
2012-12-28 00:39:40:903 AsyncRun:download_progress|percent=1
2012-12-28 00:39:40:933 AsyncRun:download_progress|percent=3
2012-12-28 00:39:40:933 AsyncRun:download_progress|percent=5
2012-12-28 00:39:40:934 AsyncRun:download_progress|percent=5
2012-12-28 00:39:40:975 AsyncRun:download_progress|percent=9
2012-12-28 00:39:41:068 AsyncRun:download_progress|percent=21
2012-12-28 00:39:41:131 AsyncRun:download_progress|percent=29
2012-12-28 00:39:41:182 AsyncRun:download_progress|percent=37
2012-12-28 00:39:41:298 AsyncRun:download_progress|percent=50
2012-12-28 00:39:41:354 AsyncRun:download_progress|percent=58
2012-12-28 00:39:41:447 AsyncRun:download_progress|percent=74
2012-12-28 00:39:41:489 AsyncRun:download_progress|percent=82
2012-12-28 00:39:41:582 AsyncRun:download_progress|percent=100
2012-12-28 00:39:41:582 AsyncRun:download_progress|percent=100
2012-12-28 00:39:41:614 AsyncRun:download_completed|cancel=False|result_size=205568
关于.NET中基于事件的异步模式-EAP的用户互动如下:
相关问题:
答: >>详细
相关问题:
答: >>详细
相关问题:
答: >>详细
- 【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状态码
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
