2016-05-11 17 views
1

In der Vergangenheit Konsolenanwendungen verwendet, ich habe Systeme Akka.NET Schauspieler am Leben gehalten wie folgt aus:Schauspieler die Lebensdauer des Systems in WPF

class Program { 
    static void Main(string[] args) { 

     using (var actorSystem = ActorSystem.Create("ExampleSystem")) { 
      var exampleActor = actorSystem.ActorOf(Props.Create(() => new ExampleActor()), name: "Example"); 
      Console.WriteLine("Akka.NET ActorSystem is now running, press any key to shut down"); 

      Console.ReadKey(); 
      actorSystem.Shutdown(); 
      actorSystem.AwaitTermination(timeout: TimeSpan.FromSeconds(5)); 
     } 
    } 
} 

Ohne die Console.ReadKey(), was der richtige Weg ist, zu verwalten die Lebensdauer eines Akteursystems für eine WPF-Anwendung?

(Bonuspunkte: Ich habe das Herunterfahren und AwaitTermination gehört veraltet sind, aber ich bin nicht sicher, ob der neue Best-Practice)

Antwort

0

Derzeit, wenn Sie eine ActorSystem herunterzufahren möchten, sollten Sie verwenden ActorSystem.Terminate(), die eine Task zurückgibt, die abgeschlossen wird, sobald das Herunterfahren abgeschlossen ist.

Es gibt auch eine andere Eigenschaft auf dem ActorSystem, WhenTerminated, die aussieht, als ob es nur existiert, so dass Sie Zugriff auf die Beendigungsaufgabe erhalten können, wenn Sie es benötigen, ohne das System zu beenden.

In Ihrem Beispiel wird Console.ReadKey() zum Blockieren und Verhindern des Beendens des Prozesses verwendet, was in einer WPF-App nicht erforderlich ist. Sie können entweder Ihre wpf-Anwendung schließen, wenn Sie sich nicht um den Status des Systems kümmern, oder sie beenden und warten, bis die Beendigungsaufgabe abgeschlossen ist, wenn Sie das System ordnungsgemäß herunterfahren müssen.