关于 suspend 的问题

来源:12-2 案例:仿官方框架实现 launch 2

xxxxjase普通

2020-10-18

问题:

为啥有些 block: suspend () -> Unit 生成的是 SuspendLambda
而有些 block: suspend () -> Unit 生成的是 Function 呢?

但是无论是 SuspendLambda 还是 Function ,自身都实际上是状态机,同时都有一个 Continuation 参数。
这个是共同点。

写回答

2回答

bennyhuo

2020-10-18

(我之前的回复没了??)


是这样的,我看了下最新版本目前的做法是,使用 suspend {} 的形式会编译生成 SuspendLambda 类型的实例。不过这个吧,编译器的内部实现,也可能下个版本就改了,不用太纠结,了解它怎么运行的就行。

0
0

bennyhuo

2020-10-18

我用最新的代码确认了一下,suspend {} 现在都会编译成 SuspendLambda 类型。同学不用纠结了~


其实我们只要知道用于启动协程的 suspend {} 会编译成 SuspendLambda 作为协程体就可以了。需要提醒同学的是,这些都是Kotlin编译器的内部实现,版本之间其实一直也经常有变化,我们只需要抓住规律了解本质即可,不要过于纠结细节哈。


0
1
华一信息科技
老师你好,有一下问题帮忙解答下: 1. 如果是单独suspend {}挂起函数,是否会编译成SuspendLambda类型,还是必须结合.createCoroutine才可以。 2. 通过什么方式可以看到编译生成SuspendLambda类型对象
2025-03-27
共1条回复

学会Kotlin 突破开发语言瓶颈

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

1760 学习 · 481 问题

查看课程