请稍等 ...
×

采纳答案成功!

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

关于调度器与delay()方法会指定在一个其他线程

suspend fun main(args: Array<String>) {
    Logger.debug(3)
    val job = GlobalScope.launch(
        /*这个是我们自己自定义的上下文,但是这个上下文中我们并没有去创建调度器 (那么正常也是没有线程切换调度的) */
        MyContinuationInterceptor()
            + CoroutineName("HelloWorld")) {
        Logger.debug(1)
        delay(1000)
        Logger.debug(2)
    }
    job.join()
    Logger.debug(4)
}

关于这行代码,在调用delay之后,会切换协程 那么1/2执行会在一个线程3/4会在另一个线程,运行的结果也是这样的。但是这样有些想不通,因为这段代码中的自定义上下文中我是没有创建调度器的 也就是说默认执行在主线程。那么我调用了delay挂起之后就变成了另一个线程 同时这段代码以后都所有代码都执行在这个线程(尤其是4,我已经写在协程方法体之外了,看代码感觉应该是在main线程 但是还是指定在delay创建的线程)感觉这样有些误导,感谢老师帮我指点一下。

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

插入代码

1回答

bennyhuo 2019-11-28 22:36:22

13在一个线程,24在一个线程,delay会切到别的线程,等到1000ms后回调2,因为没有调度器,所以就直接在回调线程执行。4的原因是你join会等待协程执行完再执行,而协程最后执行是在delay的回调线程,所以24在一个线程。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号