有时间限制的计算

2023-11-24

我正在尝试编写一个构造,它允许我在给定的时间窗口内运行计算。就像是:

def expensiveComputation(): Double = //... some intensive math

val result: Option[Double] = timeLimited( 45 ) { expensiveComputation() }

这里的timeLimited会跑expensiveComputation超时时间为 45 分钟。如果达到超时则返回None,否则它将结果包装成Some.

我正在寻找一个解决方案:

  • 性能和内存相当便宜;
  • 将运行限时任务当前线程.罢工>

有什么建议吗?

EDIT

我知道我原来的问题没有解决方案。假设我可以创建一个用于计算的线程(但我不喜欢使用线程池/执行器/调度程序)。最快、最安全、最干净的方法是什么?


运行给定的代码块或在超时时抛出异常:

@throws(classOf[java.util.concurrent.TimeoutException])
def timedRun[F](timeout: Long)(f: => F): F = {

  import java.util.concurrent.{Callable, FutureTask, TimeUnit}

  val task = new FutureTask(new Callable[F]() {
    def call() = f
  })

  new Thread(task).start() 

  task.get(timeout, TimeUnit.MILLISECONDS)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有时间限制的计算 的相关文章

随机推荐