Kotlin 不等待协程完成?
Kotlin not waiting for a coroutine to finish?
我正在学习协程,有些事情让我有点困惑
import kotlinx.coroutines.*
@OptIn(DelicateCoroutinesApi::class)
fun main() {
println("[${Thread.currentThread().name}] In main thread")
GlobalScope.launch {
println("[${Thread.currentThread().name}] In coroutine")
repeat(4) {
println("$it")
}
}
}
当我 运行 这段代码时,输出有点不可预测,有时我从协程中得到输出,有时我没有..
谁能解释一下这是什么原因造成的?谢谢!
我相信有几个选项,但问题的核心是主线程认为你的程序已经完成,所以它结束了程序。您需要等待协程完成。试试下面的块。它在继续之前等待协程完成:
val job = GlobalScope.launch {
println("[${Thread.currentThread().name}] In coroutine")
repeat(4) {
println("$it")
}
}
job.join()
可以在此处找到更多信息,https://kotlinlang.org/docs/coroutines-basics.html#an-explicit-job
我正在学习协程,有些事情让我有点困惑
import kotlinx.coroutines.*
@OptIn(DelicateCoroutinesApi::class)
fun main() {
println("[${Thread.currentThread().name}] In main thread")
GlobalScope.launch {
println("[${Thread.currentThread().name}] In coroutine")
repeat(4) {
println("$it")
}
}
}
当我 运行 这段代码时,输出有点不可预测,有时我从协程中得到输出,有时我没有..
谁能解释一下这是什么原因造成的?谢谢!
我相信有几个选项,但问题的核心是主线程认为你的程序已经完成,所以它结束了程序。您需要等待协程完成。试试下面的块。它在继续之前等待协程完成:
val job = GlobalScope.launch {
println("[${Thread.currentThread().name}] In coroutine")
repeat(4) {
println("$it")
}
}
job.join()
可以在此处找到更多信息,https://kotlinlang.org/docs/coroutines-basics.html#an-explicit-job