关于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

0
5
bennyhuo
回复
aiqingyuyan
是的。
2020-06-22
共5条回复

学会Kotlin 突破开发语言瓶颈

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

1760 学习 · 481 问题

查看课程