Windows сервис, использующий BackgroundService, не может быть остановлен - PullRequest
0 голосов
/ 08 мая 2020

Я использую Net Core 3.X BackgroundService, и после публикации моего кода я установил исполняемый файл, созданный как Windows Service.

В моем ExecuteAsyn c метод I есть такой код:

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

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

Этот ручной вызов StopAsyn c останавливает выполнение и выходит из while l oop, но когда я go перехожу в services.ms c, я вижу что моя Windows служба все еще находится в рабочем состоянии, хотя ничего не выполняет.

Как я могу остановить службу автоматически и не вызывать "cmd \ c s c stop ..."?

Спасибо

1 Ответ

1 голос
/ 08 мая 2020

Ваш BackgroundService останавливается правильно, но приложение не останавливается.

Чтобы остановить приложение из фоновой службы, введите IHostApplicationLifetime и назовите его так:

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

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

Вам не нужно звонить this.StopAsync, потому что это (в конечном итоге) будет вызвано StopApplication.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...