withTimeoutOrNull 是 Kotlin 协程库中的一个非常有用的函数,它允许你在指定的时间内执行一个代码块,如果在指定的时间内代码块没有执行完毕,那么它会返回 null,而不是抛出一个异常。这个函数在处理可能需要较长时间完成的操作,但又不想让程序因为等待这个操作而阻塞的场景中非常有用。 

withTimeoutOrNull使用:

 fun performDatabaseQuery(): String {
       delay(1500)
       return "Query result"
   }

   fun main() {
       runBlocking {
           val result = withTimeoutOrNull(1000.milliseconds) {
               performDatabaseQuery()
           }
           if (result == null) {
               println("Database query timed out.")
           } else {
               println(result)
           }
       }
   }

 结合suspendCancellableCoroutine来使用:

@OptIn(ExperimentalCoroutinesApi::class)
    suspend fun main(): String = suspendCancellableCoroutine { ctn ->
        runBlocking {
            val result = withTimeoutOrNull(1000) {
                delay(900) // 这里的时间不一定是900ms
                "操作完成"
            }
            if (result == null) ctn.resume("操作超时") {} else ctn.resume(result) {}
        }
    }



// 调用
 lifecycleScope.launch {
            val result = main()
            println("1111 : $result")
        }

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部