首页 > 解决方案 > 将 .Netcore IHostedService 作为控制台应用程序关闭

问题描述

我在 .netcore 2.2 中构建了通用主机(IHostedService)。我将 HostBuilder 作为 RunConsoleAsync() 运行。RunConsoleAync() 将等待 Ctrl + C 关闭应用程序。我想在 StartAsync() 过程完成后立即关闭控制台应用程序,而不是用户必须按 ctrl + c。

我尝试使用新的 CancellationToken(true) 调用 StopAsync(),但这对我没有帮助。

我将其开发为 IHostedService,因为此应用程序将部署在多个平台上。

标签: c#.net-core

解决方案


我假设您已经IHostedService实施了。您需要做的就是注入IHostApplicationLifetime并使用它来停止应用程序,如下所示:

    public class Service : IHostedService
{
    private readonly IHostApplicationLifetime _applicationLifetime;
    public Service(IHostApplicationLifetime applicationLifetime)
    {
        _applicationLifetime = applicationLifetime;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        ...

        _applicationLifetime.StopApplication();
        return Task.CompletedTask;
    }

    ...
}

推荐阅读