Тайм-аут в будущем Скала - PullRequest
       28

Тайм-аут в будущем Скала

0 голосов
/ 10 декабря 2018

Я думаю, у меня возникла проблема с пониманием firstCompletedOf.Учитывая завершающее будущее и не завершающее будущее, я получаю тайм-аут при выполнении следующего четыре раза.

Учитывая этот метод f:

def f = {
  val completingFuture = Future {
    1
  }
  val nonCompletingFuture = Future {
    while (true) {}
  }
  val combinedFuture = Future.firstCompletedOf(List(
   completingFuture,
    nonCompletingFuture
  ))
  val result = Await.result(combinedFuture, 10.seconds)
  println(result)
}


f
f
f
f

Когда я запускаю его четыре раза, как показановыше, я получаю исключение по тайм-ауту.Поэтому я подумал, что такого исключения не может быть, потому что завершающее будущее всегда возвращается.

Исключением является

Исключение в потоке "main" java.util.concurrent.TimeoutException: Futures timedчерез 10 секунд

Где я ошибаюсь?

1 Ответ

0 голосов
/ 10 декабря 2018

Ваша задача while (true) {} никогда не завершается.Он навсегда блокирует поток в контексте выполнения.Поэтому каждый раз, когда вы запускаете f, вы теряете один поток в контексте выполнения до тех пор, пока у него не закончатся потоки, и вы не начнете получать тайм-ауты.

...