34

Scalaでスケジュールされた未来を実装しようとしています。特定の時間待ってから本体を実行したいと思います。これまでのところ、次の簡単なアプローチを試しました

val d = 5.seconds.fromNow

val f = future {Await.ready(Promise().future, d.timeLeft); 1}

val res = Await.result(f, Duration.Inf)

しかし、私は将来的にTimeoutExcpetionを取得しています。これは正しいアプローチですか、それとも単に Java の ScheduledExecutor を使用する必要がありますか?

4

7 に答える 7

2

他のすべてのソリューションでは、遅延タスクごとに akka を使用するか、スレッドをブロックします。より良い解決策 (既に akka を使用していない場合) は、Java の ScheduledThreadPoolExecutor を使用することです。そのための scala ラッパーの例を次に示します。

https://gist.github.com/platy/8f0e634c64d9fb54559c

于 2015-01-25T01:30:16.520 に答える
-7

これに対する最短の解決策は、おそらくscala-asyncを利用することです:

import scala.async.Async.{async, await}

def delay[T](value: T, t: duration): Future[T] = async {
  Thread.sleep(t.toMillis)
  value
}

または、ブロックの実行を遅らせたい場合

def delay[T](t: duration)(block: => T): Future[T] async {
  Thread.sleep(t.toMillis)
  block()
}
于 2014-03-05T14:41:27.870 に答える