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