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