繁体   English   中英

Kotlin 协程 runBlocking async

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM