请稍等 ...
×

采纳答案成功!

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

关于suspend函数的理解?

回答1 浏览129 2020-10-13 16:35:33

suspend函数只要不是用来当作协程本体(即:被转为SuspendLambda类型),都要手动写“continuation.resume” ?

suspend fun test() = suspendCoroutine<String> {continuation ->   
	continuation.resume("world")
}


添加回答

已采纳回答

不,你可以用来调用其他suspend函数

2020-10-13 21:42:10
  • 提问者 慕前端9039556 #1
    我不知道您说的“调用”是什么意思,如果是直接调用编辑器会报错:"suspension functions can be called only within coroutine body"。只能把其他挂起函数当作返回值(个人认为属于一种传递),如下:    
    suspend fun demo(): String{
        return demo2()
    }
    2020-10-16 14:58:17
  • --- 原问题
    suspend函数只要不是用来当作协程本体(即:被转为SuspendLambda类型),都要手动写“continuation.resume” ?

    ---- 我再重说一下

    不是的,suspend函数即便不是用来当作协程本体(即:被转为SuspendLambda类型),也不一定手动写“continuation.resume”,因为可以用来调用其他 suspend 函数。

    看看这下能不能明白?

    至于你的回复,你可能有什么误解。suspend 函数只能在 suspend 函数当中调用,因此不能直接在普通函数当中调用,这个能理解吧,但谁说就必须一定要作为返回值了呢?

    suspend fun demo(): String{

        demo2()
    return "Hello World"

    }

    有什么问题么?
    2020-10-16 18:23:59
  • 提问者 慕前端9039556 回复 bennyhuo #3
    我弄错了。我发现我的挂起函数里面是这样的
    suspend fun demo(): String{
     
    SuspendCoroutine{  c ->
        demo2()
     }
       
    return "Hello World"

    }
    所以报的错。
    2020-10-17 08:25:14

一课掌握Kotlin 突破开发语言瓶颈

难度中级
时长24小时
人数860
好评度99.8%

如果有一门语言可以取代Java,那么它一定是Kotlin。一课掌握Kotlin,突破开发语言瓶颈。

讲师

bennyhuo 全栈工程师

某互联网巨头移动端负责人,Kotlin中文社区负责人,微信公众号 Kotlin 号主;最早从事Kotlin开发和推广活动的参与者和组织者之一,长期专注于Kotlin的研究,拥有丰富的线上生产环境中使用 Kotlin 开发项目经验;曾在 『DroidConf』和 『JetBrains Open Day』等大会分享 Kotlin 相关实战经验,慕课网出品多门实战课程,广受学员好评与喜爱。

意见反馈 帮助中心 APP下载
官方微信