协程Coroutines实现并发和串行两种操作
2020-10-30 本文已影响0人
蓝不蓝编程
背景
一般情况,我们使用协程,是将异步变成同步,操作就都变成了串行的了,但是有些界面需要调用调用多个接口,而且还需要等所有接口完成后再做某个动作.那该怎么办呢?
下面的样例为串行调用:
launch {
val resp1 = service.query1()
resp1?.let { view.xx1() }
val resp2 = service.query2()
resp2?.let { view.xx2() }
//等所有接口调用完毕后执行如下操作
}
解决方案
按照如下代码,对于接口调用加上async
关键字,这样所有的接口调用直到await
才会阻塞,这样就达到了接口并发调用,但是等所有接口调用完成后再执行特定动作.
launch {
val resp1 = async { service.query1() }
val resp2 = async { service.query2()}
resp1.await()?.let { view.xx1() }
resp2.await()?.let { view.xx2() }
//等所有接口调用完毕后执行如下操作
}