0

使用 Scala-IDE 3.0.3(基于 Scala 2.10.4),以下代码通过显示List未来计算的前 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 中运行此代码不会导致问题。我在那里想念什么?

4

1 回答 1

3

事实证明,这并不是内存管理的问题,Futures而是与 Eclipse 为并发程序处理控制台输出的方式有关。

Thread.sleep(1000)在程序末尾添加让Eclipse显示所有控制台输出,解决问题。

非常感谢@jilen 非常有帮助的评论!

于 2014-04-14T11:08:03.263 回答