科特琳协程多次发射

时间:2019-11-13 08:07:33

标签: kotlin coroutine kotlin-coroutines

如何像Kotlin中的多线程一样进行多次启动

我想让first second永远在同一时间工作!

喜欢此代码...

runBlocking {

    // first
    launch{
      first()
    }

    // second
    launch{
       second()
    }
}


suspend fun first(){
    // do something 
    delay(1000L)

    // Recursive call
    first() 
}

suspend fun second(){
    // do something 
    delay(1000L)

    // Recursive call
    second() 
}

2 个答案:

答案 0 :(得分:3)

如果您的示例代码是应用程序中唯一正在运行的代码,则它已经可以工作。如果您需要这两种方法与您的应用程序并行运行,请将它们包装在GlobalScope.launch中:

GlobalScope.launch {

   launch { first() }
   launch { second() }
}

这将一直运行,直到被取消和/或引发内部异常。如果协程内部不需要太多资源并在使用时正确释放它们,那么StackOverFlow永远不会有问题。


除了递归代码外:尝试按照注释中的建议进行循环。

答案 1 :(得分:1)

您可以实现无限循环执行

runBlocking {
    launch { while(true) first() }
    launch { while(true) second() }
}

suspend fun first(){
    // do something 
    delay(1000L)
}

suspend fun second(){
    // do something 
    delay(1000L)
}