异步回调和同步回调
来源:互联网 发布:宁波新房成交最新数据 编辑:程序博客网 时间:2024/05/19 11:50
异步回调就是发起请求后,不等待响应就先去处理自己的响应,它不是处理整个请求,只是处理一小部分,在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等,有些异步是同一个线程完成的,有些异步是不同的线程,所以回调函数里要更新控件都会提示跨线程访问控件的错误提示。
软件模块中存在一定接口,从调用方式上分为三类
1、同步调用;2、回调;3、异步调用
首先,同步调用是一种阻塞式调用,调用方要等待对象执行完毕才返回。它是一种单向调用。
其次,回调是一种双向调用模式,也就是说,被调用方在接口被调用得同时会调用对方得接口。
最后,异步调用是一种类似消息或者事件的机制,不过它的调用方向刚好相反,接口的服务在收到被调用的信息或事件时,会主动调用(调用方)的接口。
回调和异步调用得关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。
对于不同类型的语言(结构化语言和对象语言)、平台(win32,jdk)等,客户和服务的交互除了同步方式以外,都需要具备一定的异步通知机制,让服务方或接口提供方,在某些情况下能主动通知客户,而回调是实现异步的一个最简捷的途径。
结构化语言中,可以通过回调函数还实现回调,回调函数也是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。
在面向对象语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象称为回调对象。对于象C++或objectPascal这些兼容了过程特性的对象语言,不仅提供了回调对象、回调方法等特性,也行兼容过程语言的回调函数机制。
0 0
- 异步回调和同步回调
- 异步回调和同步回调
- 异步回调和同步回调
- 异步回调和同步回调
- java 回调的同步回调和异步回调
- 同步调用、回调和异步调用区别
- 同步调用、回调和异步调用区别
- 同步调用、回调和异步调用区别
- 同步调用、回调和异步调用区别
- 同步调用、回调和异步调用
- 同步调用、回调和异步调用区别
- java的同步调用、回调和异步调用。
- 同步调用、回调和异步调用的区别
- 软件接口:同步调用、回调和异步调用
- DUBBO研究与学习二:打基础-同步调用、回调和异步调用区别
- 【NodeJS】回调和异步调用的关系
- 如何用Java回调和线程实现异步调用
- Entity回调和监听器
- 旧手机利用 第一弹 ——ALMP服务器
- Andrew Ng机器学习课程10
- C# winform 窗体从右下角向上弹出窗口效果
- C++内存布局
- sizeof浅析——求结构体大小
- 异步回调和同步回调
- shell脚本 遍历所有目录
- yvgrgmhgxy
- 关于iOS打印NSDictionary中文字符出现乱码
- 剑指offer:复杂链表的复制
- 《当幸福来敲门》之精采对白
- linux下使用protobuf实现简单配置功能
- 从github克隆项目以及上传文件到github
- 使用nginx sticky实现基于cookie的负载均衡