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
不经过任何调度器即开始执行协程体。注意: 遇到挂起点之后的执行就取决于挂起点本身的逻辑以及上下文当中的调度器了
二,运行结果:
可以看到1和1、4的输出,确实是在同一个线程main中,
而3的输出则另启了一个线程: DefaultDispatcher-worker-1