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 应用程序关闭,或者如果您需要系统干净地关闭,则终止并等待终止任务完成。
过去,使用控制台应用程序,我让 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 应用程序关闭,或者如果您需要系统干净地关闭,则终止并等待终止任务完成。