このscalaコードを実行することにより、コンソールに出力がありません。何が起こっているのか本当にわかりません)
Console.println("Console.println OK!")
=>を削除すると、すべてうまくいくようです。
Thread.sleep(2000)
=>を削除すると、すべてうまくいくようです。
これについて何かアイデアはありますか?どうもありがとうございました!
クレメント
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
import scala.concurrent.{Await, Future}
import scala.language.postfixOps
object ScalaFuture {
def main(args: Array[String]) {
val f: Future[String] = Future {
Thread.sleep(2000)
"future value"
}
f.onSuccess {
case s => {
Console.println("Console.println OK!")
System.out.println("System.out.println OK!")
}
}
Await.ready(f, 60 seconds)
}
}
待機は、2秒後に行われるfutureの完了を待機していますが、別のスレッド(futureと同様)で実行されるonSuccess
ハンドラーを待機しませんが、Await.ready(f, 60 seconds)
の後、何かを印刷するよりも早くプロセスが終了します。正しく処理するには-onComplete
の新しいフューチャーを作成します:
val f: Future[String] = Future {
Thread.sleep(2000)
"future value"
}
val f2 = f map { s =>
println("OK!")
println("OK!")
}
Await.ready(f2, 60 seconds)
println("exit")
Await.ready(f, ...)
の結果:
exit
OK!
OK!
Await.ready(f2, ...)
の結果:
OK!
OK!
exit