Scala Future ничего не возвращает при выделении слишком большого количества памяти

StackOverflow https://stackoverflow.com//questions/23057445

  •  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 за ваш очень полезный комментарий!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top