关于Kotlin协程createCoroutine()执行逻辑的理解正确性确认
Kotlin
createCoroutine 执行逻辑疑问解答 你的理解完全正确,具体逻辑可以拆解为以下两点:
createCoroutine()是Kotlin协程的底层原生API,仅负责完成协程的初始化封装,不会主动触发协程体执行。创建完成后协程的所有执行逻辑都会被打包在返回的Continuation实例中,处于未激活状态,不会运行任何协程体内的代码。- 只有调用该
Continuation实例的resume(Unit)方法后,协程才会被正式激活,开始执行你传入的挂起lambda表达式,直到遇到第一个挂起点或者执行完全部逻辑,执行结果会通过Continuation的resumeWith回调返回。
你可以通过下面的示例代码验证这个逻辑:
import kotlin.coroutines.* suspend fun testCoroutine() { println("协程体代码被执行") } fun main() { // 创建协程,此时不会执行testCoroutine内的代码 val continuation = ::testCoroutine.createCoroutine(object : Continuation<Unit> { override val context: CoroutineContext = EmptyCoroutineContext override fun resumeWith(result: Result<Unit>) { println("协程执行完成,结果:$result") } }) println("协程创建完成,尚未调用resume") // 取消下面的注释才会触发协程体执行 // continuation.resume(Unit) }
如果注释掉continuation.resume(Unit),运行后只会打印"协程创建完成,尚未调用resume",没有协程体的相关日志,和你的理解完全一致。
要启动已创建的协程,请在返回的Continuation实例上调用
resume(Unit)。
内容的提问来源于stack exchange,提问作者Siri。
相关产品推荐
相关产品推荐

