Время жизни системы актеров в WPF

В прошлом, используя консольные приложения, я поддерживал системы акторов Akka.NET следующим образом:

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));
        }
    }
}

Как без Console.ReadKey() можно управлять временем существования системы акторов для приложения WPF?

(дополнительные баллы: я слышал, что Shutdown и AwaitTermination устарели, но я не уверен в новой передовой практике)


person RJB    schedule 11.05.2016    source источник


Ответы (1)


В настоящее время, если вы хотите выключить ActorSystem, вы должны использовать ActorSystem.Terminate(), который возвращает Task, который завершается после завершения выключения.

Есть еще одно свойство в ActorSystem, WhenTerminated, которое выглядит так, как будто оно существует только для того, чтобы вы могли получить доступ к задаче завершения, если вам это нужно, не сообщая системе о прекращении.

В вашем примере Console.ReadKey() используется для блокировки и предотвращения завершения процесса, что не требуется в приложении WPF. Вы можете либо просто позволить вашему wpf-приложению закрыться, если вас не волнует состояние системы, либо завершить работу и дождаться завершения задачи завершения, если вам нужно, чтобы система завершила работу корректно.

person Patrick Allwood    schedule 11.05.2016