如何像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()
}
答案 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)
}