我正在尝试kotlin协同程序,我问自己,如何在同一个暂停功能中执行多个工作(例如,同时调用网络和本地数据库)。通过研究这个问题,我找到了以下解决方案:
suspend fun doWorkInParallel() {
coroutineScope {
val networkCall = async { // stuff }
val databaseCall = async { // stuff }
awaitAll(networkCall, databaseCall)
}
}
以下是我的问题:
使用上述方法正确吗?或者在同一个暂停功能中执行并行工作是否有其他方法
当我调用suspend函数时,另一个“coroutinescope”是否泄漏了任何内容?
这项工作是并行完成的吗?
当两个 networkCall
和 databaseCall
访问一个相同的对象/更改一个相同的对象(例如在 networkCall
变量设置为 State X
而在 databaseCall
变量设置为 Stata Y
)
1条答案
按热度按时间oaxa6hgo1#
这段代码非常好,这正是使用协同程序执行并行计算的方式。如果不需要两个调用的返回值,可以替换
async()
具有launch()
移除awaitAll()
线路。coroutineScope()
自动等待其所有子项完成,因此您无需手动执行此操作。是的,这是正确的方法。
我不知道你是什么意思。你不能在这里泄露任何东西。
是的,只要您使用由多个线程支持的协同路由调度程序(通常是这种情况),两个调用都将并行运行。
这是共享可变状态的典型情况。您需要以某种方式同步对共享变量的访问。这取决于你的具体情况。