最近,我正在学习Scala语言。今天,我提出一个问题,即花太多时间如何终止函数。
例如:
object HelloWorld {
def main(args: Array[String]) {
println("Hello, World")
// How to terminate the sum() function
// when the time that it takes greater than 2 second?
val t0 = System.nanoTime : Double
val total: BigInt = sum(1000000000)
val t1 = System.nanoTime : Double
println("Elapsed time " + (t1 - t0) / 1000000.0 + " msecs")
println(total)
}
//Given that sum() is written by others and I cannot change it.
def sum(k: Int): BigInt = {
var total: BigInt = 0
for (i <- 1 to k) {
total += i
}
total
}
}
Run Code Online (Sandbox Code Playgroud)
上面的scala代码大约需要70s。
使用未来!
val resultFuture : Future[ReturnType] = Future.apply {
longComputation
}
val resultMaybeCut = Await.result(resultFuture, DurationOfChoice)
Run Code Online (Sandbox Code Playgroud)
作为记录,Await.result(awaitable:Awaitable [T],atMost:Duration):
awaitable仍未准备就绪,则抛出TimeoutExceptionatMost为Duration.Undefined,则抛出IllegalArgumentException警告(感谢@markusthoemmes):
这样做不会中断基础的未来计算,而只是让您轻松地对其超时!(这可能是问题,也可能不是问题)。如果我相信在Scala 2.10中杀死或使Future超时,则没有超级简单的方法来真正停止基础计算,因此您可能要参考此处发布的其他解决方案!
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |