多种异步调用示例

我一直从事企业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,也可以作为备忘,示例用。

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

posted @ 2012-06-03 09:15  heguo  阅读(351)  评论(0编辑  收藏  举报