协程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回答

bennyhuo

2020-11-19

completion跟挂起点没关系,只在协程执行完成后调用,所以你的理解有问题的。

1
3
压缩疯雷
非常感谢!
2020-11-21
共3条回复

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

0
0

bennyhuo

2020-11-19

n个挂起点恢复时调用n次,启动协程时一次,这就是n+1次。

如果算上完成回调,就是n+2次。

0
0

慕前端9039556

2020-11-18

别纠结这个,没用。老师视频里说n+2书里说n+1。所以这是个无解的。

0
0

学会Kotlin 突破开发语言瓶颈

如果有一门语言可以取代Java,那么它一定是Kotlin。

1694 学习 · 447 问题

查看课程