异步操作

计算限制异步

使用QueueUserWorkItem线程池来实现,只需ThreadPool.QueueUserWorkItem方法即可实现异步,但是由于其局限性,比如没有一个内建的机制让你知道操作什么时候完成,也没有一个机制在完成时获得一个返回值,于是微软就引入了Task的概念,Task功能相当强大,它有许多的记录项,来记录一些额外信息来实现 什么时候完成,完成时获取返回值以及等待等等功能。Task会抛出异常,执行完毕之后才抛出System.AggregateException异常。为了方便,还提供了Parallel的静态For,ForEach和Invoke方法,其内部实现都是使用Task。而且还有PLINQ,使用Task来实现异步查询。

I/O限制异步

IAsyncResult APM编程模型,在FCL中,有许多类都实现了APM编程模型,主要是I/O操作的类,比如文件读取,数据库操作,网络操作的相关类,都是以BeginXxx方法和EndXxx方法实现。APM的异常处理都是在CallBack函数中进行。

APM还可以实现计算限制的操作,因为委托都是继承与System.MulticastDelegate类,而且只有四个方法,一个构造函数,一个Invoke函数以及BeginInvoke和EndInvoke函数。

还有一种编程模型是基于事件的异步模式(EAP),事件就是延迟执行,当执行一个函数,到达一定条件是就会触发事件链中的方法,比如WebForm的.cs文件的button1.Click+=....之类的,当点击button时才会触发,当触发时才分配线程。在Jeffer Richer建议使用APM模型。

 

当然Task也可以用于I/O限制异步操作,IAsyncResult APM也可以用于计算限制异步操作

转载于:https://www.cnblogs.com/alab/archive/2012/09/23/2699025.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值