多种异步调用示例

本文分享了一位企业MIS系统开发者在实现异步调用时的经验,包括使用WPF、Rx、Linq、Task等技术进行线程池管理与并行调用的实践,强调了提高开发效率与界面响应速度的重要性。通过对比不同方法的性能,最终推荐了Task作为实现异步调用的理想选择。

我一直从事企业MIS系统开发,以个人经验,不必太纠结于代码性能损失,保证业务逻辑简明,易维护易重构,才是重中之重。

为了提交开发效率,甚至不惜牺牲运行效率。

昨天写了一些异步调用的示例代码,wpf程序实现ping功能,需要rx支持。暂未实现.net 4.5才支持的async await,将来补充完整。

1.主线程逐个ping了255个IP,返回结果,毫无悬念,速度慢,UI线程被阻塞。

2.Func.BeginInvoke() 异步Ping,应该也是进入线程池的,UI即时响应。

3.线程池ThreadPool实现异步线程调用,效果同上。

4.试图通过Linq的AsParallel()实现并行调用,没有达到预期的效果,可能这是因为运行期智能判断是否并行调用的一个操作。

5.Task调用,分别用TaskFactory().StartNew()和TaskCompletionSource各实现了一个Task,效果理想,代码简洁,更重要的是在.net4.5中可以提供更多支持。

6.在Rx的Observable支持下,尝试异步响应的实现,结果是同步的。

7.改进的Observable异步实现,调用Func.ToAync()()即可简单实现,威力显著。

8.暂时未实现async和await关键字提供的异步调用,这应是最佳实践,需.net4.5类库支持。

 

总结:

可能是因为单CPU,异步调用并没有带来多少速度提升,但界面即时响应带来的操作体验是显而易见的。

这些代码可以在将来的实战中ctrl_c + ctrl_v,也可以作为备忘,示例用。

需要的朋友一定用的上,猛击这里下载源码

转载于:https://www.cnblogs.com/heguo/archive/2012/06/03/2532526.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值