请稍等 ...
×

采纳答案成功!

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

有个地方不理解

private suspend fun joinSuspend() = suspendCoroutine<Unit> { continuation ->
    doOnCompleted {
        continuation.resume(Unit)
    }
}

上面这个join的实现,用到了suspendCoroutine,我记得前几节课里,老师你说过,suspendCoroutine中必须要执行线程切换,这个suspend函数才会被真正的挂起,挂起后会返回一个特殊的标记对象。但是这里doOnCompleted中我看了下只是用来创建和保存Disposable,并没有执行线程切换呀?它是如何被挂起的呢?

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

1回答

bennyhuo 2020-09-30 23:50:11

切换调用栈不一定切换线程。我肯定不会说一定要切线程的。

切换线程是切换调用栈的充分不必要条件。其实只要保存回调,在其他时候同一个线程调用,一样不是异步的。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕雪4289266 #1
    感谢老师回答,具体在章节《11-5 Kotlin协程的基本要素1》中第8分30秒,老师提到的suspendCoroutine用法的时候,说到suspendCoroutine中必须要切换线程才是真正的挂起,不知道是否是我理解有误?
    回复 有任何疑惑可以回复我~ 2020-10-08 16:36:35
  • 提问者 慕雪4289266 #2
    另外切换调用栈除了切线程之外,还有什么其他方式呢?
    回复 有任何疑惑可以回复我~ 2020-10-08 16:38:03
  • bennyhuo 回复 提问者 慕雪4289266 #3
    我听了一下,8.30的位置讲的是,okhttp请求网络,如果他切换了线程,那就会挂起,如果直接resume,那就不会挂起。没有挂起一定要切换线程的意思。
    回复 有任何疑惑可以回复我~ 2020-10-08 19:13:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信