【问题标题】:kotlin execute code upon coroutine returnkotlin 在协程返回时执行代码
【发布时间】:2019-10-16 04:11:40
【问题描述】:

关于协程的新手问题:-)

对于不返回值的协程,有没有办法在协程完成时执行一些代码?

在本例中,funcA() 执行一些异步调用,完成后funcBfuncC 需要完成,其余代码可以独立于funcA() 完成继续执行

... other code executing
... other code executing

launch {
  funcA()
}
funcB()
funcC()

... other code executing
... other code executing

一种方法是将funcBfuncC 包含在一个方法中,我们可以将async 与await 一起使用...但是为什么要为此返回一个值。

executeFunBC()
{
  funcB()
  funcC()
}


launch {
 val result = funcA()
}
 executeFunBC(result).await()

基本上,在某些语言中,您可以使用“块”或闭包,并在以相同方法完成该块时执行一些代码。 (类似于回调)

回到我的问题:

有没有办法在同一个函数中定义funcBfuncC在完成funcA()时的执行?

【问题讨论】:

    标签: kotlin-coroutines


    【解决方案1】:

    很简单,这样做:

    launch {
      funcA()
    
      // Will not execute until funcA() returns
      funcB() 
      funcC()
    }
    

    但请确保您使用适用于 funcB()funcC() 的调度程序,例如像这样launch(Dispatchers.Main) {

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 2020-03-12
      • 2018-02-22
      相关资源
      最近更新 更多