Ваш код уже принимает IHostApplicationLifetime в качестве третьего сервиса. Вы можете вызвать StopApplication()
, когда хотите, чтобы хост завершил работу.
Метод StopAsync
опасен, хотя и говорит, что служба остановлена, хотя base `StopAsync не имеет, Это метод , который будет сигнализировать токен отмены услуги, так что это может иметь неожиданные последствия. Он должен быть изменен на:
public override Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation($"Worker stopped at: {DateTime.Now}");
return base.StopAsync(cancellationToken);
}
или, что еще лучше:
public override Task StopAsync(CancellationToken cancellationToken)
{
await base.StopAsync(cancellationToken);
_logger.LogInformation($"Worker stopped at: {DateTime.Now}");
}
Аргумент cancellationToken
сигнализируется, когда истекает период завершения работы и службы должны немедленно завершаться. Он не используется самой BackgroundService
, он передается переопределенным реализациям StopAsync