【问题标题】:How to use Kotlin's coroutines with collections如何将 Kotlin 的协程与集合一起使用
【发布时间】:2019-07-12 22:44:16
【问题描述】:

我对 Kotlin 及其协程模块还很陌生,我正在尝试做一些起初对我来说似乎很简单的事情。

我有一个函数(下面的getCostlyList())在经过一些昂贵的计算后返回一个列表。该方法被顺序调用多次。然后将所有这些调用合并到一个 Set 中。

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

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

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

【问题讨论】:

    标签: kotlin kotlin-coroutines


    【解决方案1】:

    你可以这样写:

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

    【讨论】:

      猜你喜欢
      • 2020-10-02
      • 1970-01-01
      • 2018-02-23
      • 2021-01-24
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多