kotlin: 协程的启动模式: UNDISPATCHED

一,代码

代码:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
            runBlocking {
                log(1)
                val job = GlobalScope.launch(start = CoroutineStart.UNDISPATCHED) {
                    log(2)
                    delay(100)
                    log(3)
                }
                log(4)
                job.join()
                log(5)
            }
        }
协程在UNDISPATCHED 这种模式下会直接开始在当前线程下执行,直到第一个挂起点,
即 UNDISPATCHED 不经过任何调度器即开始执行协程体。
注意: 遇到挂起点之后的执行就取决于挂起点本身的逻辑以及上下文当中的调度器了

二,运行结果:

image

可以看到1和1、4的输出,确实是在同一个线程main中,
而3的输出则另启了一个线程: DefaultDispatcher-worker-1

 

posted @ 2025-08-09 13:40  刘宏缔的架构森林  阅读(10)  评论(0)    收藏  举报