Если вы развернете реализацию system.actorOf
, вы увидите вызов метода имени makeChild
. Внутри этого метода используется длинный метод по признаку ActorRefProvider
(внутренне использующий LocalActorRefProvider
) под названием actorOf
. Этот довольно длительный метод инициализирует дочернего актера. Соответствующие части:
val props2 =
// mailbox and dispatcher defined in deploy should override props
(if (lookupDeploy) deployer.lookup(path) else deploy) match {
case Some(d) ⇒
(d.dispatcher, d.mailbox) match {
case (Deploy.NoDispatcherGiven, Deploy.NoMailboxGiven) ⇒ props
case (dsp, Deploy.NoMailboxGiven) ⇒ props.withDispatcher(dsp)
case (Deploy.NoMailboxGiven, mbx) ⇒ props.withMailbox(mbx)
case (dsp, mbx) ⇒ props.withDispatcher(dsp).withMailbox(mbx)
}
case _ ⇒ props // no deployment config found
}
или если Router
явно предусмотрено:
val routerDispatcher = system.dispatchers.lookup(p.routerConfig.routerDispatcher)
val routerMailbox = system.mailboxes.getMailboxType(routerProps, routerDispatcher.configurator.config)
// routers use context.actorOf() to create the routees, which does not allow us to pass
// these through, but obtain them here for early verification
val routeeDispatcher = system.dispatchers.lookup(p.dispatcher)
val routeeMailbox = system.mailboxes.getMailboxType(routeeProps, routeeDispatcher.configurator.config)
new RoutedActorRef(system, routerProps, routerDispatcher, routerMailbox, routeeProps, supervisor, path).initialize(async)
Это означает, что как только вы получите обратно ActorRef
, почтовый ящик был инициализирован, и вы не должны бояться отправки это сообщения.
Если вы думаете о семантике того, что означает ActorRef
, было бы немного бессмысленно предоставить один из ActorRef
, который частично/не инициализирован. Это сделало бы системные гарантии слабыми и заставит программиста дважды подумать, прежде чем передавать сообщения, что является противоположным желанием рамки.
Это имеет смысл. Я ожидаю будущее вместо ActorRef, если возврат system.actorOf не будет использоваться немедленно. Благодаря тонну. – anindyaju99
@ anindyaju99 Добро пожаловать, рад, что это помогло. –