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()}}}

运行结果:

image

三,withTimeoutOrNull例子,无需捕捉异常

代码:

        //处理按钮点击事件binding.button2.setOnClickListener {runBlocking {val result = withTimeoutOrNull(500) {launch {println("delay begin")delay(1000)println("delay end")}}println("result: $result")}}

运行结果:

image