请稍等 ...
×

采纳答案成功!

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

suspendCoroutine里Continuation到底指哪个Continuation?

老师,有个协程的问题想请教下,在11-6视频这里
图片描述
这里的it指的是createCoroutine之后返回的Continuation,还是传进去的complete的那个Continuation

因为我发现11-5里面讲到将回调转写成挂起函数里的suspendCoroutine里Continuation是传进去的complete的那个Continuation
图片描述

目前听11-6的视频 ,听老师讲的意思 ,这里的it指的是createCoroutine之后返回的Continuation,这里就有点疑惑了,请老师有空解答下。

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

1回答

bennyhuo 2024-03-25 23:33:51
startCoroutine的参数completion是协程执行完的回调,创建时返回的continuation是协程自身的continuation,问题里面提到的it是创建时返回的这个,不是那个completion哈。
0 回复 有任何疑惑可以回复我~
  • 提问者 慕姐0483322 #1
    如果是这样的话,11-5挂起函数的类型中讲到suspend关键字的修饰的function,反编译出来后变成
    
    fun foo(continuation:Continuation<Unit>):Any{}
    
    谈到回调转写成挂起函数里的suspendCoroutine里的Continuation是获得这个参数里的continuation,那这里的continuation指的是传进去的complete的那个Continuation吗?
    回复 有任何疑惑可以回复我~ 2024-03-26 07:46:39
  • bennyhuo 回复 提问者 慕姐0483322 #2
    抱歉同学,最近刚换工作比较忙,刚看到回复。fun foo(continuation:Continuation<Unit>):Any{}
     这个函数要在协程内部调用,传入的这个 continuation 就是协程本体,而不是 completion。在 foo 执行完之后,如果是同步执行,那就直接返回了;如果是异步执行,就要使用这个 continuation 来告诉所在的协程该继续往下执行了。
    
    请注意!一个协程涉及到的两个 continuation 实例,即协程体(start 的时候返回的那个)和完成回调(即 completion,start 的时候传入的那个),分别用于不同的目的。协程体在协程执行时用到,协程内部调用任何挂起函数时传入的都是这个实例;完成回调只有在协程执行完成才会用到,用于通知创建协程的外部调用者这个协程执行完了。
    回复 有任何疑惑可以回复我~ 2024-04-09 20:30:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信