gpt4 book ai didi

scala - Scala 中的超时 future

转载 作者:行者123 更新时间:2023-12-03 04:44:40 24 4
gpt4 key购买 nike

假设我有一个函数,它调用一个阻塞可中断操作。我想在超时的情况下异步运行它。也就是说,我想在超时到期时中断该功能。

所以我正在尝试做类似的事情:

import scala.util.Tryimport scala.concurrent.Futuredef launch(f: () => Unit, timeout: Int): Future[Try[Unit]] = {  val aref = new java.util.concurrent.atomic.AtomicReference[Thread]()   import ExecutionContext.Implicits.global  Future {Thread.sleep(timeout); aref.get().interrupt} // 1  Future {aref.set(Thread.currentThread); Try(f())}    // 2}

问题是 (1) 中的 aref 可能为 null,因为 (2) 尚未将其设置为当前线程。在这种情况下,我想等到 aref 设置。最好的方法是什么?

最佳答案

您可以使用 Await 采取稍微简单的方法。 。 Await.result 方法将超时持续时间作为第二个参数,并在超时时抛出 TimeoutException

try {
import scala.concurrent.duration._
Await.result(aref, 10 seconds);
} catch {
case e: TimeoutException => // whatever you want to do.
}

关于scala - Scala 中的超时 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16615750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com