请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于 suspend 的问题

问题:

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

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

正在回答 回答被采纳积分+3

插入代码

2回答

bennyhuo 2020-10-18 21:15:24

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


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

0 回复 有任何疑惑可以回复我~
bennyhuo 2020-10-18 20:45:46

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


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


0 回复 有任何疑惑可以回复我~
  • 老师你好,有一下问题帮忙解答下:
    1. 如果是单独suspend {}挂起函数,是否会编译成SuspendLambda类型,还是必须结合.createCoroutine才可以。
    2. 通过什么方式可以看到编译生成SuspendLambda类型对象
    回复 有任何疑惑可以回复我~ 2025-03-27 17:00:18
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号