par*_*tic 8 java timeout scala
我正在尝试编写一个允许我在给定时间窗口中运行计算的构造.就像是:
def expensiveComputation(): Double = //... some intensive math
val result: Option[Double] = timeLimited( 45 ) { expensiveComputation() }
Run Code Online (Sandbox Code Playgroud)
这timeLimited将以expensiveComputation45分钟的超时运行.如果它达到超时它返回None,否则它将结果包装进去Some.
我正在寻找一个解决方案:
有什么建议吗?
编辑
我理解我的原始问题没有解决方案.假设我可以为计算创建一个线程(但我更喜欢不使用线程池/执行器/调度程序).什么是最快,最安全,最干净的方法?
运行给定的代码块或在超时时抛出异常:
@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)
}
Run Code Online (Sandbox Code Playgroud)