我有这段代码,我在 Scala 中发出询问请求:
someActorRef ? SomeMessage()
但是,我收到此消息:
could not find implicit value for parameter timeout: akka.util.Timeout
我也尝试过这个:
Await.ready(someActorRef ? SomeMessage(), Duration("3 seconds")).asInstanceOf[String]
但我收到了同样的消息。
无论如何,我不想阻止。我想获得一个 Future
,然后再给它一个 onComplete
回调。
我可以在不阻塞的情况下向其他 Actor 请求消息吗?
最佳答案
ask
需要一个隐式的Timeout
,之后它只会使 Future 失败并出现 TimeoutException
。
import akka.pattern.ask
import akka.util.Timeout
import scala.concurrent.duration._
implicit val timeout = Timeout(5 seconds)
val f = someActorRef ? SomeMessage()
请注意,这 5 秒内不会发生任何阻塞,ask
模式是完全异步/非阻塞的。它将返回一个 Future
,您可以阻止(不推荐)或附加回调(如您所愿)
f.onComplete(doSomething(_))
更多信息here .
关于scala - 找不到参数超时的隐式值 : akka. util.Timeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41170210/