【问题标题】:Kotlin run a task for at most fixed timeKotlin 最多运行一个任务
【发布时间】:2021-08-14 18:35:25
【问题描述】:
有没有办法在 Kotlin 中运行一个任务最多固定的时间?
例如:
val result: XXX? = runAtMostFor(millis = 1000) { ..TRY to do something }
如果任务在 1000 毫秒之前结束,或者只是一个空值,目标是立即获得结果,并在截止日期到来时停止执行任务
【问题讨论】:
标签:
multithreading
kotlin
kotlin-coroutines
【解决方案2】:
withTimeout 在内部进行阻塞操作时不起作用。比如下面的代码会打印“wrong”
import kotlinx.coroutines.*;
fun main() {
runBlocking {
withTimeout(500) {
Thread.sleep(5000);
println("wrong")
}
}
}
没有办法运行带有超时的阻塞代码。唯一的方法是修改代码本身以定期检查是否该停止。