如何在集合中使用Kotlin的协程

时间:2019-07-12 22:44:16

标签: kotlin kotlin-coroutines

我对Kotlin及其协程模块还很陌生,一开始我想做的事情似乎很简单。

我有一个函数(下面的getCostlyList()),该函数在进行一些昂贵的计算后会返回一个List。此方法依次称为多次。然后将所有这些调用合并到一个集中。

    private fun myFun(): Set<Int> {
        return (1..10)
                .flatMap { getCostlyList() }
                .toSet()
    }

    private fun getCostlyList(): List<Int> {
        // omitting costly code here...
        return listOf(...)
    }

我的目标是使用协程以异步方式对此昂贵的方法进行这些调用,但是我很难解决这个问题。

1 个答案:

答案 0 :(得分:3)

您可以这样写:

private suspend fun myFun(): Set<Int> = coroutineScope {
    (1..10)
        .map { async { getCostlyList() } }
        .awaitAll()
        .flatten()
        .toSet()
}