kotlin: Job 超时处理
一,两种超时处理方式
使用 withTimeout 或 withTimeoutOrNull 可以指定 Job 任务的超时时间。两者的区别在于:
- withTimeout 函数会在超时后抛出一个超时异常 TimeoutCancellationException
- withTimeoutOrNull 函数会在超时后返回一个 null 值
二,withTimeout例子,需捕捉异常
代码:
//处理按钮点击事件
binding.button1.setOnClickListener {
runBlocking {
try {
withTimeout(500) {
launch {
println("delay begin")
delay(1000)
println("delay end")
}
}
} catch (e: TimeoutCancellationException) {
e.printStackTrace()
}
}
}
运行结果:
三,withTimeoutOrNull例子,无需捕捉异常
代码:
//处理按钮点击事件
binding.button2.setOnClickListener {
runBlocking {
val result = withTimeoutOrNull(500) {
launch {
println("delay begin")
delay(1000)
println("delay end")
}
}
println("result: $result")
}
}
运行结果: