【问题标题】: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


    【解决方案1】:

    您可以使用withTimeoutwithTimeoutOrNull

    【讨论】:

      【解决方案2】:

      withTimeout 在内部进行阻塞操作时不起作用。比如下面的代码会打印“wrong”

      import kotlinx.coroutines.*;
      fun main() {
          runBlocking {
              withTimeout(500) {
                  Thread.sleep(5000);
                  println("wrong")
              }
          }
      }
      

      没有办法运行带有超时的阻塞代码。唯一的方法是修改代码本身以定期检查是否该停止。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-28
        • 1970-01-01
        • 2020-10-12
        相关资源
        最近更新 更多