异步回调和同步回调
2011-04-21 23:03
260 查看
异步回调就是发起请求后,不等待响应就先去处理自己的响应,它不是处理整个请求,只是处理一小部分,在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等,有些异步是同一个线程完成的,有些异步是不同的线程,所以回调函数里要更新控件都会提示跨线程访问控件的错误提示。
相关文章推荐
- Node.js_同步/异步回调
- C#(同步调用、异步调用、异步回调)
- 同步和异步回调
- 同步调用、回调和异步调用的区别
- C#委托的同步调用、异步调用、异步回调
- 同步,异步,回调例子
- boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等
- 同步调用,异步回调和 Future 模式
- 回调--闭包--同步--异步--阻塞--非阻塞
- C# 同步调用、异步调用、异步回调
- 简单解析三种JAVA调用方式-同步,异步,回调
- 委托(delegate)的三种调用方式:同步调用,异步调用,异步回调(转载)
- 同步调用、回调和异步调用区别
- Python 中的进程、线程、协程、同步、异步、回调
- 软件接口:同步调用、回调和异步调用
- node.js的作用、回调、同步异步代码、事件循环
- c# 同步委托,异步委托,异步回调
- C#“同步调用”、“异步调用”、“异步回调”
- 异步回调和同步回调
- C# 委托的三种调用示例(同步调用 异步调用 异步回调)