【发布时间】:2018-07-17 12:25:12
【问题描述】:
我需要我的代码运行一个块并在 1 秒后返回值以防超时,但让它完成工作。
我设法实现了一些可行的方法,但 IDE 建议用withContext(DefaultDispatcher) 替换async,但它的工作方式不一样。
所以我的问题是如何让它在没有 IDE 警告的情况下工作。我是 Kotlin Coroutines 的新手,所以我可能会在这里遗漏一些东西。
@Test
fun how_timeout_with_null_works() = runBlocking<Unit> {
val time = measureTimeMillis {
println("Start test")
val result = withTimeoutOrNull(1, TimeUnit.SECONDS) {
async { doSomeHardWork() }.await()
}
println("End test $result")
}
println("Time $time")
delay(3000)
}
private suspend fun doSomeHardWork(): String {
println("start hard work")
Thread.sleep(2000)
print("end hard work")
return "[hard work done]"
}
【问题讨论】: