关闭 .Netcore IHostedService 作为控制台应用程序

Kam*_*sim 13 c# .net-core

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

我尝试使用 new CancellationToken(true) 调用 StopAsync(),但它对我没有帮助。

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

Thu*_*kwa 19

我假设您已经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;
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)