老师可以帮我看看这么理解resumeWith运行时序有没有问题吗?

来源:11-6 Kotlin 协程的基本要素2

慕前端9039556

2020-08-18

图片描述
上图我理解的是外层suspend函数生成的continuation的resume先执行(resumeWith执行弟一次label 1)
然后遇到挂起函数a就return了一个挂起状态。(label++)
然后把自己包装成了一个safeContinuation 当做complete传递给了a。(这里我没看到a是否执行了自己的resume。不知道是否会执行?)然后a中的 it.resume(Unit)(resumeWith执行第二次 label 2)同时,外层suspend函数恢复执行。

看了代码之后还有一个小疑惑。
视频只说了如果是挂起函数会返回COROUTINE_SUSPENDED这个标记,但是没说怎么判断的这个函数是否是挂起函数。(ps:我想看看单线程延时任务是怎么判定为挂起的)

写回答

2回答

我敲阔爱

2021-01-02

SafeContinuation 是为了确保只有发生异步调用时才挂起,这么理解这句话

1
0

bennyhuo

2020-08-18

包装为SafeContinuation是在suspendCoroutine里面做的,你看下源码就知道了。判断是否挂起很简单啊,if 返回值是这个对象,就认为是挂起,否则就当结果处理。

你看下我有个用Java代码仿协程的例子。

0
3
bennyhuo
回复
慕前端9039556
差不多就是这个意思
2020-08-18
共3条回复

学会Kotlin 突破开发语言瓶颈

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

1760 学习 · 481 问题

查看课程