Jul*_* A. 5 kotlin kotlin-coroutines
似乎这两个术语可以互换使用。但是,我似乎仍在努力努力,似乎也存在一些差异。有区别吗?
的确,这两个是密切相关的。要恢复协程,您实际上致电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)")
}
Run Code Online (Sandbox Code Playgroud)
在这里,您可以看到我们重现了整个suspend-resume场景,而只保留了Continuation对象。
我的结论是,由于Kotlin协程设计的特点(尤其是无堆栈的事实),“协程”和“延续”的概念之间存在模糊的界线。
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |