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,也可以作为备忘,示例用。

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

  • 相关阅读:
    小白简单留言板(2)-将表单信息输入数据库
    小白简单留言板(1)-页面设置等
    HTMLCSS学习
    golang函数调用计时
    iOS中堆和栈的区别
    UIButton的继承链
    TCP三次握手
    iOS 控制任务执行顺序
    将NSNumber转成字符串,为什么.0丢失
    HTTP状态码
  • 原文地址:https://www.cnblogs.com/heguo/p/2532526.html
Copyright © 2011-2022 走看看