我有以下代码,在Scala中提出询问请求:
someActorRef ? SomeMessage()
Run Code Online (Sandbox Code Playgroud)
但是,我收到此消息:
could not find implicit value for parameter timeout: akka.util.Timeout
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
Await.ready(someActorRef ? SomeMessage(), Duration("3 seconds")).asInstanceOf[String]
Run Code Online (Sandbox Code Playgroud)
但是我得到了同样的信息。
无论如何,我不想阻止。我想要一个Future,然后再给它onComplete回调。
我可以要求其他演员发信息而不加阻挡吗?
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()
Run Code Online (Sandbox Code Playgroud)
请注意,在这5秒钟内不会阻塞,该ask模式是完全异步/非阻塞的。它将带给您一个Future,您可以在其上阻止(不推荐)或附加回调(如您所愿)
f.onComplete(doSomething(_))
Run Code Online (Sandbox Code Playgroud)
更多信息在这里。