.net core 无法停止使用BackgroundService的Windows服务

.net core 无法停止使用BackgroundService的Windows服务,.net-core,windows-services,.net-core-3.0,background-service,.net Core,Windows Services,.net Core 3.0,Background Service,我使用的是NetCore3.xBackgroundService,在发布代码后,我安装了作为Windows服务生成的可执行文件 在我的ExecuteAsync方法中,我有如下代码: protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { //do something

我使用的是NetCore3.xBackgroundService,在发布代码后,我安装了作为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…”


谢谢

您的
后台服务
正在正确停止,但应用程序没有停止

要从后台服务停止应用程序,请插入一个
IHostApplicationLifetime
,并按如下方式调用它:

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

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

您不需要调用
this.StopAsync
,因为
StopApplication
将(最终)调用它。您的
后台服务
正在正确停止,但应用程序没有停止

要从后台服务停止应用程序,请插入一个
IHostApplicationLifetime
,并按如下方式调用它:

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

    if (someConditionIsTrue)
    {
      _hostApplicationLifetime.StopApplication();
    }
  }
}
您不需要调用
this.StopAsync
,因为
StopApplication
最终会调用它