如果两个不同的异步回调启动两个不同的同步方法会怎样?
What happens if two different asynchronous callbacks start two different synchronous methods?
假设我有两个不同的 api(让 api1 和 api2)。当 api1 的响应到达时,我调用一个同步方法 foo1()
。同样,当api2的响应到来时,我调用另一个同步方法foo2()
。情况是这样的——我同时调用了这两个 api。 api1 的响应到达并调用方法 foo1()
。同时,api2的响应也到了,方法foo2()
被调用。
我的问题是执行顺序是什么? foo2()
会等待 foo1()
完成还是并行执行?
好吧,我自己试过了,感谢@DroiDev。我用的Anko library为异步tasks.Here是代码:
doAsync {
Log.d("ASYNC", "Async A started")
foo1()
uiThread {
Log.d("ASYNC", "Async A done")
}
}
Thread.sleep(1000)
doAsync {
Log.d("ASYNC", "Async B started")
foo2()
uiThread {
Log.d("ASYNC", "Async B done")
}
}
}
fun foo1() {
Log.d("ASYNC", "foo1() called")
Thread.sleep(3000)
Log.d("ASYNC", "foo1() done")
}
fun foo2() {
Log.d("ASYNC", "foo2() called")
Log.d("ASYNC", "foo2() done")
}
这是我得到的Result/Log:
07-12 11:44:55.195 23990-24054/gemini.com.jetpack D/ASYNC: Async A started
foo1() called
07-12 11:44:56.195 23990-24028/gemini.com.jetpack D/ASYNC: Async B started
foo2() called
07-12 11:44:56.205 23990-24028/gemini.com.jetpack D/ASYNC: foo2() done
07-12 11:44:56.215 23990-23990/gemini.com.jetpack D/ASYNC: Async B done
07-12 11:44:58.195 23990-24054/gemini.com.jetpack D/ASYNC: foo1() done
07-12 11:44:58.205 23990-23990/gemini.com.jetpack D/ASYNC: Async A done
因此,方法 foo2() 不会等待 foo1() 完成。
假设我有两个不同的 api(让 api1 和 api2)。当 api1 的响应到达时,我调用一个同步方法 foo1()
。同样,当api2的响应到来时,我调用另一个同步方法foo2()
。情况是这样的——我同时调用了这两个 api。 api1 的响应到达并调用方法 foo1()
。同时,api2的响应也到了,方法foo2()
被调用。
我的问题是执行顺序是什么? foo2()
会等待 foo1()
完成还是并行执行?
好吧,我自己试过了,感谢@DroiDev。我用的Anko library为异步tasks.Here是代码:
doAsync {
Log.d("ASYNC", "Async A started")
foo1()
uiThread {
Log.d("ASYNC", "Async A done")
}
}
Thread.sleep(1000)
doAsync {
Log.d("ASYNC", "Async B started")
foo2()
uiThread {
Log.d("ASYNC", "Async B done")
}
}
}
fun foo1() {
Log.d("ASYNC", "foo1() called")
Thread.sleep(3000)
Log.d("ASYNC", "foo1() done")
}
fun foo2() {
Log.d("ASYNC", "foo2() called")
Log.d("ASYNC", "foo2() done")
}
这是我得到的Result/Log:
07-12 11:44:55.195 23990-24054/gemini.com.jetpack D/ASYNC: Async A started
foo1() called
07-12 11:44:56.195 23990-24028/gemini.com.jetpack D/ASYNC: Async B started
foo2() called
07-12 11:44:56.205 23990-24028/gemini.com.jetpack D/ASYNC: foo2() done
07-12 11:44:56.215 23990-23990/gemini.com.jetpack D/ASYNC: Async B done
07-12 11:44:58.195 23990-24054/gemini.com.jetpack D/ASYNC: foo1() done
07-12 11:44:58.205 23990-23990/gemini.com.jetpack D/ASYNC: Async A done
因此,方法 foo2() 不会等待 foo1() 完成。