質問

Scala-IDE 3.0.3(Scala 2.10.4に基づく)、次のコードは、将来、ListMessageと同様に、計算されたFuture completedの最初の10値を将来から表示することで正しく完了します。

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でのメモリ管理に関する問題ではなく、並行プログラムのためのコンソール出力をハンドリングする方法に関連しています。

プログラムの最後にThread.sleep(1000)を追加すると、Eclipseがすべてのコンソール出力を表示し、問題を解決します。

あなたのとても親切なコメントをありがとうございました!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top