zoukankan      html  css  js  c++  java
  • 异步回调和同步回调【转】

    异步回调就是发起请求后,不等待响应就先去处理自己的响应,它不是处理整个请求,只是处理一小部分,在Web页上就表现为页面没刷新,却局部更新了数据。
    相对于同步就是必须等到响应该请求后才能做别的事,具体到Web页就是整个页面刷新了,数据才更新。
    下面举两个列子:
    首先举个同步调用的例子:
    
    比如你的程序调用了一个方法,这个方法要执行很长很长时间,而且这个时间都不确定,传统的办法就是“同步调用”,如下:
    
    private int Func()
    {
    // 这个方法要执行很长时间,并且返回一个int的值。
    }
    
    private void A()
    {
    int n = Func();
    textBox1.Text = n.ToString();
    // 这里得到的n就是Func执行出来的结果,并且显示在textBox1中。
    }
    
    采用上述方法,可以叫做同步调用,很明显它有一个缺点:
    Func方法执行的时间过长,程序会阻塞,并且无法继续执行其他的代码,给用户的体验就是整个程序都会僵着,打开任务管理器会提示该程序没有响应,用户以为程序死了,就会手动结束这个程序,
    
    而异步调用就不一样,在调用完Func这个方法后,不必等待Func执行完,就可以执行其他的代码,直到Func执行完,才把结果返回,
    如果Func提供了异步方法FuncAsync(),就可以这样调用:
    
    private void A()
    {
    FuncAsync();
    // 这里执行FuncAsync方法,并不会阻塞,程序会在后台执行完FuncAsync方法后,自动调用FuncCompleted方法,并且把结果传过去。
    }
    
    private void FuncCompleted(int n)
    {
    textBox1.Text = n.ToString();
    // 参数n就是异步回调返回的结果,
    }
    异步回调需要编写代码才能支持,网络传输方面的类库一般都提供异步方法,如socket编程,web服务,ajax,wcf等,有些异步是同一个线程完成的,有些异步是不同的线程,所以回调函数里要更新控件都会提示跨线程访问控件的错误提示。 
  • 相关阅读:
    黑名单项目
    MVC
    《Spring敲门砖之基础教程第一季》 第一章 概要介绍
    【推荐】Java工程师如何从普通成为大神值得一读
    Spring框架知识总结-注入Bean的各类异常
    循序渐进Socket网络编程(多客户端、信息共享、文件传输)
    Struts2:ValueStack
    Struts2 的国际化实现
    一位10年程序员生涯的骨灰给小弟弟小妹妹们的一些总结性忠告
    集合类接口和类层次关系图
  • 原文地址:https://www.cnblogs.com/super-super/p/6023732.html
Copyright © 2011-2022 走看看