【发布时间】:2018-12-03 16:16:09
【问题描述】:
我编写了一个使用通用主机的控制台应用程序,主要是为了利用其 IOC 容器并保持应用程序与我们的 ASP.NET Core 应用程序一致。
给你一个基本的问题。主机是否在启动代码运行后自动关闭主机(不等待 Ctrl-C)。
杰森
【问题讨论】:
我编写了一个使用通用主机的控制台应用程序,主要是为了利用其 IOC 容器并保持应用程序与我们的 ASP.NET Core 应用程序一致。
给你一个基本的问题。主机是否在启动代码运行后自动关闭主机(不等待 Ctrl-C)。
杰森
【问题讨论】:
为此有一个特殊的接口,IApplicationLifetime。
在你的构造函数中注入这个并调用 StopApplication() 来优雅地关闭它。这也允许您在其他地方处理应用程序的启动和关闭,因此您无需自己协调。
您可以在此处阅读更多相关信息: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host#iapplicationlifetime-interface
【讨论】:
Environment.Exit(0);
尝试在执行点结束时调用它。 但是如果你的代码中有一些其他线程、非托管资源或其他不可预测的东西,它可能无法正常工作。
另一件事是您可能根本不必使用 GenericHost。请参阅this 问题的答案。它可能会指出如何在没有 GenericHost 的情况下创建 DI 容器。
【讨论】:
你可以使用 host.StartAsync()
static async Task<int> Main(string[] args)
{
using var host = CreateHostBuilder(args).Build();
await host.StartAsync();
}
【讨论】: