You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Coroutine未执行的输出异常原因咨询及资源求荐

问题原因与解决方案

为什么协程没执行?

你用GlobalScope.launch启动的协程属于后台协程,这类协程不会阻止JVM进程退出。main函数作为程序入口,执行到println("End of program")后就会结束,此时JVM会直接终止所有后台线程,包括协程所在的线程,导致协程还没来得及启动或执行就被终止了。

修复代码获取预期输出

有两种常用的修复方式:

方式1:用runBlocking包裹协程

runBlocking会创建一个阻塞当前线程的协程作用域,直到作用域内所有协程执行完毕才会继续执行后续代码,确保协程完成后main函数才结束:

fun main() = runBlocking {
    println("Start of program")
    launch {
        println("Starting coroutine")
        val result = someOperation()
        println("Coroutine Running thread is: ${Thread.currentThread().name}")
        println("Coroutine completed with result: $result")
        println("End of the coroutine function")
    }
    println("End of program")
}

suspend fun someOperation(): String {
    delay(3000)
    return "Operation performed successfully"
}

方式2:手动等待协程完成

如果坚持使用GlobalScope,可以获取协程的Job对象,调用join()方法等待其执行完成(join()是挂起函数,需要在协程作用域或挂起函数中调用,因此用runBlocking包裹):

fun main() = runBlocking {
    println("Start of program")
    val job = GlobalScope.launch {
        println("Starting coroutine")
        val result = someOperation()
        println("Coroutine Running thread is: ${Thread.currentThread().name}")
        println("Coroutine completed with result: $result")
        println("End of the coroutine function")
    }
    job.join() // 等待协程执行完毕
    println("End of program")
}

suspend fun someOperation(): String {
    delay(3000)
    return "Operation performed successfully"
}

协程学习资源推荐

  • Kotlin官方协程指南:从核心概念到进阶用法都有系统讲解,覆盖作用域、调度器、异常处理等关键内容。
  • Kotlin官方视频教程:有专门的协程系列视频,通过实例演示协程的使用场景与最佳实践。
  • 《Kotlin实战》书籍:书中有独立章节讲解协程,结合实际代码案例帮助理解异步编程逻辑。
  • Kotlin Koans:包含协程相关练习题,通过动手实践巩固知识点。

内容的提问来源于stack exchange,提问作者stardep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:52:16