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
相关产品推荐
相关产品推荐

