Windows 无法停止使用 BackgroundService 的服务

Windows service using BackgroundService cannot be stopped

我正在使用 Net Core 3.X BackgroundService,在发布我的代码后,我安装了作为 Windows 服务生成的可执行文件。

在我的 ExecuteAsync 方法中,我有一些这样的代码:

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    while (!stoppingToken.IsCancellationRequested)
    {
        //do something

        if(someConditionIsTrue)
        {
            await this.StopAsync(new CancellationToken());
        }
    }
}

对 StopAsync 的手动调用会停止执行并退出 while 循环,但是当我转到 services.msc 时,我看到我的 Windows 服务仍处于 运行 状态,尽管是没有执行任何事情。

如何自动停止服务而不调用 "cmd \c sc stop..."?

谢谢

您的 BackgroundService 正在正确停止,但 应用程序 没有停止。

要停止来自后台服务的应用程序,请注入IHostApplicationLifetime并这样调用它:

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
  while (!stoppingToken.IsCancellationRequested)
  {
    //do something

    if (someConditionIsTrue)
    {
      _hostApplicationLifetime.StopApplication();
    }
  }
}

您不需要调用 this.StopAsync,因为 StopApplication 会(最终)调用它。