请稍等 ...
×

采纳答案成功!

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

关于suspend函数的理解?

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

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


正在回答

1回答

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

0 回复 有任何疑惑可以回复我~
  • 提问者 慕前端9039556 #1
    我不知道您说的“调用”是什么意思,如果是直接调用编辑器会报错:"suspension functions can be called only within coroutine body"。只能把其他挂起函数当作返回值(个人认为属于一种传递),如下:    
    suspend fun demo(): String{
        return demo2()
    }
    回复 有任何疑惑可以回复我~ 2020-10-16 14:58:17
  • bennyhuo 回复 提问者 慕前端9039556 #2
    --- 原问题
    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
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信