kotlin: delay和Thread.sleep的区别:是否检测当前协程被取消
一,代码:
//处理按钮点击事件
binding.button1.setOnClickListener {
runBlocking {
val job = launch {
var i = 0
while (true) {
Thread.sleep(500L)
//delay(500L)
i ++
println("i = $i")
}
}
delay(2000L)
job.cancel()
job.join()
println("End")
}
}
//处理按钮点击事件
binding.button2.setOnClickListener {
runBlocking {
val job = launch {
var i = 0
while (true) {
delay(500L)
i ++
println("i = $i")
}
}
delay(2000L)
job.cancel()
job.join()
println("End")
}
}
delay() 函数可以自动检测当前的协程是否已经被取消,
如果已经被取消的话,它会抛出一个 CancellationException,从而终止当前的协程。
而Thread.sleep不会检测协程是否被取消,
所以开发中在协程中不建议使用Thread.sleep
二,运行结果:
点击按钮1后:
点击按钮2后: