Будущее выполняется в фоновом режиме, а не в основном потоке.Возможно, если есть большие вычисления, это займет очень много времени.Или хуже, если есть бесконечный цикл и будущее никогда не возвращается.
Это не проблема (в прагматическом смысле), пока вы не дождетесь его завершения.Это блокирует выполнение так же, как и обычный бесконечный цикл.Таким образом, вы можете указать тайм-аут на то, как долго вы намерены ждать результата, прежде чем он остановится, с помощью TimeoutException
.
Если client.get(123)
занимает больше 10 секунд, вы получите исключение, и тест не пройдёт,В противном случае он никогда не вернется и не запустится, пока вы не убьете процесс вручную.
Подробнее о Futures
Относительно второго тайм-аута: вы спрашиваете своего актера о будущем свозможный ответ.Это также может привести к тайм-ауту.
В вашем конкретном примере тайм-аут произойдет, если ваш актер займет больше двух секунд.Но если вы, например, отобразите, отобразите, отфильтруете будущее, а затем вернете его, эти операции прекратят работу через десять секунд.
implicit val timeout = Timeout(2000)
val f1 = actor ? message // timout of 2 seconds
val f2 = f1 map longRunningOperation
Await.result(f2, 10 seconds) // timeout of 10 seconds