Scala Akka中Ask的默认超时是多少?

Scala Akka中Ask的默认超时是多少?,scala,akka,reactive-programming,Scala,Akka,Reactive Programming,Akka中Ask超时的默认值是多少 在Akka中使用ask方法所需的全部工作就是导入Akka.pattern.ask。在文档中,有一些ask示例,其中没有直接或作为隐式val提供超时 我已经阅读了ask的源代码,但找不到为超时提供的默认值。但是,即使没有提供超时,ask方法也可以正常工作,这意味着在某个地方使用了默认值 这个默认值是什么?它是如何提供来询问的?没有默认超时。必须通过手动传入或使用隐式val来提供特定的超时值以进行ask。在第二种情况下,隐式val可能不一定出现在使用ask的同一

Akka中Ask超时的默认值是多少

在Akka中使用ask方法所需的全部工作就是导入Akka.pattern.ask。在文档中,有一些ask示例,其中没有直接或作为隐式val提供超时

我已经阅读了ask的源代码,但找不到为超时提供的默认值。但是,即使没有提供超时,ask方法也可以正常工作,这意味着在某个地方使用了默认值


这个默认值是什么?它是如何提供来询问的?

没有默认超时。必须通过手动传入或使用隐式val来提供特定的超时值以进行ask。在第二种情况下,隐式val可能不一定出现在使用ask的同一文件中,这取决于调用ask时ask可以看到的其他名称空间

我从Akka食谱中复制了一些代码,如下所示

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)
}
如果没有提供的超时值,代码将无法编译


发生的事情是,我在工作中看到一些代码,这些代码似乎没有在调用ask的同一文件中提供超时。超时在调用我的文件的较大名称空间中显示为隐式val。因此必须提供一个超时,但根据代码库的不同,该超时可能不在调用ask的同一文件中。我通过在代码库中搜索akka.util.timeout类的所有用法,找到了超时出现的位置。

如果您查看类
akka.pattern.askableactoref
,您将看到ask方法有一个隐式
timeout
参数。这意味着必须在某个地方隐式定义
超时
实例,或者显式传递。否则就不行了

protected def ?(message: Any)(implicit timeout: akka.util.Timeout): Future[Any]
在您的情况下,
超时
很可能通过隐式查找解决。尝试使用隐式查找法则来查找实例


您是否介意在没有超时的情况下使用ask模式的地方共享代码?我刚刚尝试编写一个使用ask的简单程序,必须提供超时。因此,似乎没有默认超时。我问我的问题是因为我在公司的代码库中遇到了一些代码,我正在处理这些代码,似乎在没有超时的情况下使用了ask。我认为现在发生的是,在我的ask可以看到的较大名称空间的更高位置提供了超时,但在调用ask的同一文件中没有出现。是的,隐式超时可能隐藏在某个地方。。。可能在通配符导入中。我不认为隐式超时隐藏在某个地方,因为它是你应该提供给询问电话的东西,因为你知道你将在询问电话中做什么样的工作,你应该提供隐式超时。