gpt4 book ai didi

kotlin - 在 Kotlin 中,术语 Coroutine 和 Continuation 有什么区别?

转载 作者:IT老高 更新时间:2023-10-28 13:47:19 24 4
gpt4 key购买 nike

这两个术语似乎可以互换使用。然而,似乎也有一些差异,我正在努力解决。有区别吗?

最佳答案

确实,这两者关系密切。要恢复协程,您实际上调用 continuation.resume()

每个协程都有其关联的延续对象。实际上,除了那个对象,你不需要其他任何东西,它包含协程的完整状态。

在一定程度上,Kotlin 使用“协程”还包括协程调度器,它让协程知道如何准确地挂起自己,挂起时在哪里保持延续,以及以后如何恢复(调度)它。但是你也可以使用 Unconfined 调度器,它几乎和没有调度器一样好,并且完全控制恢复,只保留延续对象:

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlin.coroutines.Continuation
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine

var continuation: Continuation<Unit>? = null

fun main(args: Array<String>) {
GlobalScope.launch(Dispatchers.Unconfined) {
println("Suspending")
suspendCoroutine<Unit> { cont ->
continuation = cont
}
println("Resumed!")
}
println("After launch")
continuation!!.resume(Unit)
println("After continuation.resume(Unit)")
}

在这里您可以看到我们重现了整个暂停-恢复场景,同时只保留了 Continuation 对象。

我的结论是,由于 Kotlin 协程设计的特点(尤其是 stackless),“协程”和“延续”的概念之间的界限很模糊。

关于kotlin - 在 Kotlin 中,术语 Coroutine 和 Continuation 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50598519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com