协程resume次数的问题
来源:11-5 Kotlin 协程的基本要素1

压缩疯雷
2020-11-18
我说下我的理解老师看看对不对。
n为0的时候。
首先会有1次continuation的resume.
然后会有1次completion的resume. 如果不是真正的挂起,直接把返回结果。 如果是真的挂起(比如切了线程),返回的是一个挂起标志。等真正执行完成的时候,还会再一次调用completion的resume返回结果。 总共会有2到3次resume
每有一个挂起点,就会有一次continuation的resume.和1次(假挂起时)到2次(真挂起时)的completion的resume
就是协程中如果有n个挂起,resume的次数应该是 2+2n次(全是假挂起) 到3+3n次(全是真挂起)
4回答
-
completion跟挂起点没关系,只在协程执行完成后调用,所以你的理解有问题的。
132020-11-21 -
qq_逆袭_8
2021-03-02
suspend {}.startCoroutine()无挂起点启动的时候 源码中执行一次resume
.startCoroutine(object : Continuation<Unit> {
override fun resumeWith(result: Result<Unit>){}
)结束的时候接口中执行一次,
suspend fun getSure() = suspendCoroutine<Unit> {
thread {
println("getSure with")
it.resume(Unit)
}
}suspend {
getSure()
}.startCoroutine()启动一个挂起点就是 1+2
添加N个挂起点就是N+2
00 -
bennyhuo
2020-11-19
n个挂起点恢复时调用n次,启动协程时一次,这就是n+1次。
如果算上完成回调,就是n+2次。
00 -
慕前端9039556
2020-11-18
别纠结这个,没用。老师视频里说n+2书里说n+1。所以这是个无解的。
00
相似问题
回答 1
回答 1