[英]Kotlin coroutines runBlocking async
我是协程的新手,并试图利用它们在更短的时间内多次调用耗时的方法
fun callAPI(idList: Collection<String>): List<String> {
val storedIds = mutableListOf<String>()
runBlocking {
val ids = idList.map { data ->
async {timeConsumingMethod(data)}
}.map { it.await() }
storedIds.addAll(ids)
}
return storedIds
}
我需要对 timeConsumingMethod 的所有调用并行运行,但我不希望 callAPI 在所有 timeConsumingMethods 完成之前返回。
运行这个我看到 timeConsumingMethods 正在同步运行
谁能帮我理解我错过了什么错误?
您需要指定runBlocking
的默认单线程调度程序以外的调度程序,否则无法并行运行。
为了清晰/简洁,您的代码也可以重新排列。
fun callAPI(idList: Collection<String>): List<String> = runBlocking(Dispatchers.IO) {
idList.map {
async { timeConsumingMethod(it) }
}.awaitAll()
}
如果您使用的 UI 不想在操作期间冻结,则应考虑将其设为挂起函数并在结果准备好时对其进行响应,而不是使用runBlocking
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.