多种异步调用示例
我一直从事企业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,也可以作为备忘,示例用。
需要的朋友一定用的上,猛击这里下载源码