Тайм-аут по умолчанию отсутствует.Чтобы задать запрос, необходимо указать конкретное значение тайм-аута, передав его вручную или используя неявное значение val.Во втором случае неявный val может не обязательно появляться в том же файле, где используется запрос, в зависимости от того, какие другие пространства имен может видеть запрос при вызове.
Я скопировал некоторый код из Akka Cookbook , который выглядит следующим образом
import akka.actor.{Actor, Props, ActorSystem}
import akka.pattern.ask
import akka.util.Timeout
import scala.concurrent.Await
import scala.concurrent.duration._
class FibonacciActor extends Actor {
override def receive: Receive = {
case num : Int =>
val fibonacciNumber = fib(num)
sender ! fibonacciNumber
}
def fib (n : Int) : Int = n match {
case 0 | 1 => n
case _ => fib(n-1) + fib(n-2)
}
}
object FibonacciActorApp extends App {
implicit val timeout = Timeout(3.seconds)
val actorSystem = ActorSystem("HelloAkka")
val actor = actorSystem.actorOf(Props[FibonacciActor])
val future = (actor ? 10).mapTo[Int]
val fibonacciNumber = Await.result(future, 10 seconds)
}
Код не будет компилироваться без предоставленного значения времени ожидания.
То, что происходит, это то, что я на работе смотрю какой-то код, которыйне отображается тайм-аут в том же файле, где вызывается запрос.Тайм-аут отображается в виде неявного значения val в большем пространстве имен, где вызывается мой файл.Поэтому необходимо указать тайм-аут, но в зависимости от кодовой базы этот тайм-аут может не находиться в том же файле, где вызывается запрос.Я нашел место, где появляется тайм-аут, выполнив поиск в моей кодовой базе для всех применений класса akka.util.Timeout.