如何将Kotlin的协同程序用于集合

如何将Kotlin的协同程序用于集合,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,我对Kotlin及其协同程序模块相当陌生,我正在尝试做一些起初对我来说非常简单的事情 我有一个下面的函数getCostlyList,它在一些代价高昂的计算之后返回一个列表。此方法称为多时间顺序。然后将所有这些调用合并到一个集合中 private fun myFun(): Set<Int> { return (1..10) .flatMap { getCostlyList() } .toSet()

我对Kotlin及其协同程序模块相当陌生,我正在尝试做一些起初对我来说非常简单的事情

我有一个下面的函数getCostlyList,它在一些代价高昂的计算之后返回一个列表。此方法称为多时间顺序。然后将所有这些调用合并到一个集合中

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

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

我的目标是使用协程异步调用这个代价高昂的方法,但我很难理解这个问题

你可以这样写:

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