关于suspandLambda的相关问题
来源:11-6 Kotlin 协程的基本要素2

不是蠢名字
2020-03-20
在我的理解中it应该指的是startCoroutine传进去的那个continuation,跟这个所谓的suspendLambda和SafeContinuation感觉没什么关系啊,不知道是不是我的理解有问题
写回答
1回答
-
bennyhuo
2020-03-20
这里的 it 不是 start的时候传进去的。传进去的那个 continuation(也就是 completion) 只有在协程体执行完成之后才会回调,而且回调也不是由我们自己写出了的。
协程体编译之后会生成一个 SuspendLambda 的类的对象,这个 it 就是这个对象被 SafeContinuation(以及后面要讲到的 拦截器)包装之后的结果。
对 completion 的调用实际上是在 SuspendLambda 当中定义的。这块儿如果还是不明白,可以看下 11-6 6:40 左右用 Java 代码模拟协程执行的例子,相关源码在这里:
https://git.imooc.com/coding-398/Kotlin-Tutorials/src/master/CoroutineBasics/src/main/java/com/bennyhuo/kotlin/coroutinebasics/javaimpl/ContinuationImpl.java
052020-06-22
相似问题