zoukankan      html  css  js  c++  java
  • 多种异步调用示例

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

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

  • 相关阅读:
    eclipse下切换svn用户
    Netty实现服务端客户端长连接通讯及心跳检测
    Spring Batch系列总括(转载)
    SQL中的Null深入研究分析
    MySQL报错“1366
    Memcache学习php完整一例
    Memcache学习笔记
    递归和迭代区别
    解决textarea 输出有空格问题
    解决mysql安装出现error Nr.1045问题
  • 原文地址:https://www.cnblogs.com/heguo/p/2532526.html
Copyright © 2011-2022 走看看