2012-05-14 12 views
6

Ich habe die folgenden aufeinanderfolgenden Aktionen auf zwei Akteure, ein ElternteilP und ein KindC:Akka Kontext Uhr/unwatch passiert-vor Beziehung

  1. PC Uhren (context watch c)
  2. P Unwatches C (context unwatch c)
  3. P stoppt C anmutig (c ! PoisonPill)

Was will ich wissen, ist; bin ich garantiert, dass Pnicht ein Terminated Ereignis für C erhalten?

Hier ist ein Beispiel Stück Code

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

Antwort

4

Nein, es keine solche Garantie.

+1

Viktor - danke für die Antwort. Gibt es einen Weg dahin? Es ist wichtig, dass in meinem Fall der Akteur 'P' sich selbst als Zuhörer von' C' abmelden kann, so dass, wenn er anschließend 'C' stoppt, er kein' Terminated' Ereignis erhält. Gibt es eine Möglichkeit, einen 'onSuccess'-Aufruf an den 'unwatch'-Aufruf anzuhängen? Was nützt sonst * unwatching *? –

+0

Sie wissen nicht, ob C aus irgendeinem anderen Grund beendet wird. Nun, es könnte einfach funktionieren und dies 100% der Zeit tun, aufgrund der Art, wie es derzeit implementiert ist. Wir garantieren das nicht. –

+0

Entschuldigung, ich hätte expliziter sein sollen. Es gibt nur einen Anruf, der C stoppt; das ist die in Schritt 4 –