Я создаю BackgroundService в своем проекте, используя класс .net core 2.2 BackgroundService, у меня возникла проблема при попытке перезапустить службу, я заметил, что когда я вызываю функцию «StartAsync» (после запуска «StopAsync»)функция) Функция «ExcecuteAsync» вызывается (базовой функцией StartAsync) с отмененным токеном. Посмотрев на класс BackgroundService, я заметил, что BackgroundService содержит внутренний CancellationTokenSource, который я нигде не могу сбросить. Источник BackgroundService .
Есть ли способ сбросить или заменить cancellationToken внутри BackgroundService?
Пример кода:
namespace Services.Background
{
[DisplayName("Device Structure Service")]
public class DeviceStructureService : BackgroundService
{
private readonly ILogger<DeviceStructureService> _logger;
public DeviceStructureService(ILogger<DeviceStructureService> logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
stoppingToken.Register(() => _logger?.LogDebug($"{serviceName} background task is stopping."));
while (!stoppingToken.IsCancellationRequested)
{
_logger?.LogInformation($"The {serviceName} running at: {DateTimeOffset.Now}");
try
{
await DoWork();
}
catch (Exception exception)
{
_logger?.LogCritical(exception.ToString());
}
await Task.Delay(1000, stoppingToken);
}
await StopAsync(stoppingToken);
}
public override Task StopAsync(CancellationToken cancellationToken)
{
_logger?.LogInformation($"The {serviceName} stopped at: {DateTime.Now}");
return base.StopAsync(cancellationToken);
}
public override Task StartAsync(CancellationToken cancellationToken)
{
_logger?.LogInformation($"The {serviceName} started at: {DateTime.Now}");
return base.StartAsync(cancellationToken);
}
}
}