请稍等 ...
×

采纳答案成功!

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

这个地方我觉得没讲清楚,suspend 这个到底是啥。。

suspend { 
}.createCoroutine(object: Continuation<Unit>{
    override val context = EmptyCoroutineContext

    override fun resumeWith(result: Result<Unit>) {
        log("Coroutine End with $result")
    }
}).resume(Unit) 

createCoroutine 是创建一个协程,返回的是 Continuation,resume 应该走的这个协程的逻辑。

然后他执行完成后,resume 传入的 object 的逻辑。

那么,问题来了:

suspend {…} 这货到底是在干啥??,demo 里面也没有说明,就是空实现。。。。

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

3回答

bennyhuo 2020-08-24 08:00:32

ppt里面不是有省略号么,怎么会是什么都没有呢。

0 回复 有任何疑惑可以回复我~
提问者 xxxxjase普通 2020-08-23 23:25:34

关键是 suspend {} 里面什么都没有,他用来干啥的,这个难道不是问题?

0 回复 有任何疑惑可以回复我~
  • 这里是告诉你怎么启动协程,里面当然要写实际执行的逻辑了。
    回复 有任何疑惑可以回复我~ 2020-08-24 07:59:20
  • 提问者 xxxxjase普通 回复 bennyhuo #2
    resume 启动的是哪个协程呢? suspend {} 还是 create 创建的呢。这里很让人迷惑
    回复 有任何疑惑可以回复我~ 2020-08-24 08:06:23
  • bennyhuo 回复 提问者 xxxxjase普通 #3
    你说的这两是一个东西,不用纠结。协程本身其实就是一段代码,所以对等的概念基本就是函数,使用suspend {}得到的是协程体,表示协程执行的代码,createCoroutine则基于这个函数把协程对象创建出来,所以他俩就是一个东西。
    回复 有任何疑惑可以回复我~ 2020-08-24 08:32:14
bennyhuo 2020-08-23 23:19:39

suspend {} 会在编译后生成一个 SuspendLambda 的子类实例,视频肯定讲了,多看几遍

0 回复 有任何疑惑可以回复我~
  • 提问者 xxxxjase普通 #1
    suspend {
        }.startCoroutine(object: Continuation<Unit>{
            override val context = EmptyCoroutineContext
            override fun resumeWith(result: Result<Unit>) {
                log("Coroutine End with $result")
            }
        })
    
    
    我觉得这里的 suspend {} 其实没啥用,就是创建了一个初始的协程对象。。。
    回复 有任何疑惑可以回复我~ 2020-08-24 00:46:03
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信