老师可以帮我看看这么理解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 是为了确保只有发生异步调用时才挂起,这么理解这句话
10 -
bennyhuo
2020-08-18
包装为SafeContinuation是在suspendCoroutine里面做的,你看下源码就知道了。判断是否挂起很简单啊,if 返回值是这个对象,就认为是挂起,否则就当结果处理。
你看下我有个用Java代码仿协程的例子。
032020-08-18
相似问题
关于挂起函数的问题
回答 3