WPF 中的 Actor 系统生命周期

Actor system lifetime in WPF

过去,使用控制台应用程序,我让 Akka.NET actor 系统像这样保持活动状态:

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 已经过时,但我不确定新的最佳实践)

目前,如果你想关闭一个 ActorSystem,你应该使用 ActorSystem.Terminate(),其中 returns 一个 Task 在关闭完成后完成。

ActorSystem 上还有另一个 属性,WhenTerminated,它看起来只是为了让您可以在需要时访问终止任务,而无需告诉系统终止。

在您的示例中,Console.ReadKey() 用于阻止和防止进程结束,这在 WPF 应用程序中不是必需的。如果您不关心系统状态,您可以让您的 wpf 应用程序关闭,或者如果您需要系统干净地关闭,则终止并等待终止任务完成。