2012-05-14 14 views
6

ho le seguenti azioni sequenziali su due attori, un genitoreP e un bambino C:orologio contesto Akka/unwatch accade-prima relazione

  1. P orologi C (context watch c)
  2. P unwatches C (context unwatch c)
  3. P ferma C grazia (c ! PoisonPill)

Quello che voglio sapere è; sono sicuro che Pnon riceve a Terminated evento per C?

Ecco un esempio di codice

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] 
} 

risposta

4

No, non v'è alcuna tale garanzia.

+1

Viktor - grazie per la risposta. C'è un modo per aggirare questo? È fondamentale che nel mio caso l'attore 'P' possa cancellarsi come ascoltatore da' C' in modo tale che, quando successivamente interrompe 'C', non riceva un evento' Terminato'. C'è un modo per allegare una chiamata 'onSuccess' alla chiamata' unwatch'? Altrimenti, a che cosa serve * unwatching *? –

+0

Non si sa se C stia terminando da qualche altra ragione tra l'una e l'altra. Ora, potrebbe funzionare e farlo il 100% del tempo a causa del modo in cui è attualmente implementato. Solo non garantiamo che lo farà. –

+0

Scusate, avrei dovuto essere più esplicito. C'è solo una chiamata che ferma C; è quello al punto 4 –

Problemi correlati