通过网络调用进行数据加载的最佳异步设计,Kotlin协同程序



我必须以异步方式进行几次网络调用(使用改装(。其中一些是连接的,就像我从满足我的条件的调用2得到响应一样,那么我可以跳过3和4中的结果并继续,否则我必须使用3和4的响应并继续。

假设R1、R2、R3、R4是我以异步方式运行以填充响应对象的4个请求。如果R2返回true,那么我必须避免由R3和R4填充的字段,并用预定义的值替换它。若R2是false,那个么字段应该从R3和R4的响应中导出。

如何使用协程概念来实现这一点?如果R2是true,并且我不避开R3和R4,并且如果R3和R4随后完成,则我可能最终根据R3和R4更新值,或者等待它完成,然后确定值。

有了协同程序,这很容易。让你的所有请求都可以挂起,然后使用类似以下的代码:

val r1 = async { sendR1() }
val r2 = async { sendR2() }
val r3 = async { sendR3() }
val r4 = async { sendR4() }
if (r2.await()) {
// use predefined
} else {
// use r3.await() and r4.await()
}

最新更新