【问题标题】:Kotlin Coroutines stop executing after first Flow.collect()Kotlin 协程在第一个 Flow.collect() 后停止执行
【发布时间】:2023-02-20 19:42:56
【问题描述】:

在下面的代码块中,我希望调用所有 3 个方法:

  • 流程方法A
  • 流程方法B
  • 做点别的
suspend fun setDefaults() {

    coroutineScope { 
        launch {
            flowMethodA().collect()
        }
    }

    coroutineScope { 
        launch {
            flowMethodB().collect()
        }
    }

    doSomethingElse()
}

由于某种原因,只执行 flowMethodA。为什么会这样,我怎样才能用一种方法一个接一个地收集多个流?

【问题讨论】:

    标签: android kotlin kotlin-coroutines kotlin-flow


    【解决方案1】:

    coroutineScope 将挂起,直到所有子协程都完成后,它才会继续执行。如果您希望它们并发执行,则需要在同一个 coroutineScope 中调用您的函数。

    例如像这样:

    suspend fun setDefaults() {
        coroutineScope { 
            launch {
                flowMethodA().collect()
            }
    
            launch {
                flowMethodB().collect()
            }
    
            doSomethingElse()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-28
      • 2019-08-15
      • 2020-03-25
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      相关资源
      最近更新 更多