Scala Future 在分配过多内存时不返回任何内容
-
26-12-2019 - |
题
使用 Scala-IDE 3.0.3(基于 Scala 2.10.4),以下代码通过显示计算的前 10 个值来正确完成 List
来自未来以及 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 中运行此代码不会导致问题。我在那里缺少什么?
解决方案
事实证明,整个事情不是内存管理的问题 Futures
但这与 Eclipse 处理并发程序的控制台输出的方式有关。
添加 Thread.sleep(1000)
在程序结束时让Eclipse显示所有控制台输出,解决了问题。
非常感谢@jilen 的非常有帮助的评论!
不隶属于 StackOverflow