我有 2 名演员,一名监督员和一名儿童演员。
监督员:
class DemoActorSupervisor(implicit val system: ActorSystem, config: Config) extends Actor {
val childActor: ActorRef = context.actorOf(FromConfig.props(Props[DemoActorChild]), "DemoChildActor")
context.watch(childActor)
override def receive: Receive = {
case s: String =>
childActor forward s
}
}
童星:
class DemoActorChild extends Actor {
def receive: Receive = {
case s: String =>
Thread.sleep(100)
Future.successful(true) pipeTo (sender)
}
}
主要方法:
object ABC extends App {
implicit val system: ActorSystem = ActorSystem("Demo")
implicit val config: Config = ConfigFactory.load()
implicit val timeout: Timeout = Timeout(5, TimeUnit.MILLISECONDS)
val supervisor = system.actorOf(DemoActorSupervisor.props(), "DemoSupervisor")
val x: Future[Boolean] = (supervisor ? ("ASK")).mapTo[Boolean]
x.foreach(println)
}
我已将询问超时设置为 5 毫秒,并向主管演员发出询问电话。它将消息转发给子actor。在我Thread.sleep(100)
逻辑上放置的子演员中,我应该得到询问超时异常,因为我已将超时设置为 5 毫秒,而孩子需要超过 100 毫秒来响应,但我没有收到询问超时异常。有人可以告诉我代码有什么问题吗?我怎样才能得到询问超时异常。
你可以在描述中看到Future.foreach
:
一旦值可用,将在将来异步处理该值。
警告:如果此未来从未完成或以失败完成,则不会被调用。
如果你想使用Future.foreach
,你应该写一些类似的东西:
x.map(Success(_)).recover({case exception => Failure(exception)}).foreach(println)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句