Scala-IDE 3.0.3 (Scala 2.10.4 ベース) を使用すると、次のコードはList
、future から計算された の最初の 10 個の値とFuture completed
メッセージを表示することで正しく完了します。
import scala.concurrent._
import scala.concurrent.duration._
import scala.util.{Failure, Success}
import ExecutionContext.Implicits.global
object FutureNonBlocking extends App {
val f1: Future[List[Int]] = future {
val t = List.range(1, 50).filter(_ % 2 == 0)
println("Done")
t
}
f1.onComplete {
case Success(value) => println(value.take(10))
case Failure(e) => println("Something bad happened")
}
Await.complete(f1, 30 seconds)
}
ただし、範囲List.range(1, 50)
をに変更しList.range(1, 5000)
ても、何も表示されません (Failure
トリガーされません)。論理的には、メモリの問題に関連しているようですが、そこで何が起こっているのかわかりません。
さらに奇妙なことに、このコードを REPL で実行しても問題は発生しません。私はそこに何が欠けていますか?