会java学scala多久_Scala中超时的未来
雖然你已經得到了一些關于如何通過阻止額外線程來處理超時來實現它的答案,但我建議你嘗試不同的方式,因為Rex Kerr已經給出了 . 我不知道你在_118509中做了什么,但如果它是I / O綁定的,我建議你只使用異步I / O庫 . 如果它是某種循環,你可以直接將超時值傳遞給該函數并在那里拋出 TimeoutException ,如果它超過了超時 . 例:
import scala.concurrent.duration._
import java.util.concurrent.TimeoutException
def doSth(timeout: Deadline) = {
for {
i
} yield {
Thread.sleep(1000)
if (timeout.isOverdue)
throw new TimeoutException("Operation timed out.")
i
}
}
scala> future { doSth(12.seconds.fromNow) }
res3: scala.concurrent.Future[scala.collection.immutable.IndexedSeq[Int]] =
scala.concurrent.impl.Promise$DefaultPromise@3d104456
scala> Await.result(res3, Duration.Inf)
res6: scala.collection.immutable.IndexedSeq[Int] =
Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> future { doSth(2.seconds.fromNow) }
res7: scala.concurrent.Future[scala.collection.immutable.IndexedSeq[Int]] =
scala.concurrent.impl.Promise$DefaultPromise@f7dd680
scala> Await.result(res7, Duration.Inf)
java.util.concurrent.TimeoutException: Operation timed out.
at $anonfun$doSth$1.apply$mcII$sp(:17)
at $anonfun$doSth$1.apply(:13)
at $anonfun$doSth$1.apply(:13)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
...
scala> res7.value
res10: Option[scala.util.Try[scala.collection.immutable.IndexedSeq[Int]]] =
Some(Failure(java.util.concurrent.TimeoutException: Operation timed out.))
這將只使用1個線程,它將在單個步驟的超時執行時間后終止 .
總結
以上是生活随笔為你收集整理的会java学scala多久_Scala中超时的未来的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 拖动图片放大_Android
- 下一篇: java并发编程核心方法与框架_Java