@ Панагиотис Канавос дал ответ в комментариях к моему вопросу, но не опубликовал его как фактический ответ;этот ответ посвящен ему / ей.
Для создания службы я использовал Временную фоновую службу , такую как в Microsoft docs.
internal class TimedHostedService : IHostedService, IDisposable
{
private readonly ILogger _logger;
private Timer _timer;
public TimedHostedService(ILogger<TimedHostedService> logger)
{
_logger = logger;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Timed Background Service is starting.");
_timer = new Timer(DoWork, null, TimeSpan.Zero,
TimeSpan.FromSeconds(5));
return Task.CompletedTask;
}
private void DoWork(object state)
{
_logger.LogInformation("Timed Background Service is working.");
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Timed Background Service is stopping.");
_timer?.Change(Timeout.Infinite, 0);
return Task.CompletedTask;
}
public void Dispose()
{
_timer?.Dispose();
}
}
В моем случаеЯ сделал _timer
асинхронный вызов, выполнив new Timer(async () => await DoWorkAsync(), ...)
.
В будущем может быть написано расширение, которое сделает такой класс доступным в репозитории Extensions, потому что я думаю, что это весьма полезно.Я разместил ссылку на проблему github в описании.
Совет. Если вы планируете использовать этот класс повторно для нескольких размещенных сервисов, подумайте о создании базового класса, который содержит таймер и реферат PerformWork()
или что-то в этом роде.Логика «времени» только в одном месте.
Спасибо за ваши ответы!Я надеюсь, что это поможет кому-то в будущем.