2012-05-14 5 views
6

tengo las siguientes acciones secuenciales en dos actores, un padresP y un niño C:reloj contexto Akka/unwatch sucede, antes de la relación

  1. P relojes C (context watch c)
  2. P unwatches C (context unwatch c)
  3. P detiene C con gracia (c ! PoisonPill)

Lo que yo quiero saber es; ¿Tengo garantizado que Pno recibe un evento para C?

He aquí un ejemplo de código

class HappensBefore extends App { 
    class C extends Actor { def receive = {} } 
    class P extends Actor { 
    val c = context actorOf Props[C] 
    context watch c 
    context unwatch c 
    c ! PoisonPill 
    def receive = { case Terminated(child) => println("Oh Noes!") } 
    } 
    ActorSystem("test") actorOf Props[P] 
} 

Respuesta

4

No, no hay tal garantía.

+1

Viktor - gracias por la respuesta. ¿Hay alguna forma de evitar esto? Es crítico que en mi caso el actor 'P' pueda anular el registro como un oyente de' C' de tal manera que, cuando deje de 'C', no reciba un evento' Terminated'. ¿Hay alguna forma de adjuntar una llamada 'onSuccess' a la llamada' unwatch'? De lo contrario, ¿para qué sirve * unwatching *? –

+0

Usted no sabe si C está terminando por algún otro motivo entre ambos. Ahora, podría funcionar, y hacerlo el 100% del tiempo debido a la forma en que se implementa actualmente. Simplemente no garantizamos que lo hará. –

+0

Lo siento, debería haber sido más explícito. Solo hay una llamada que detiene a C; ese es el del paso 4 –

Cuestiones relacionadas