Реализация BackgroundQueue
, которую вы взяли из документации - это только одна часть решения: фоновая очередь будет просто отслеживать задания, которые вы хотите выполнить.
То, что вам также понадобится, находится прямо под документами: QueuedHostedService
. Это фоновая служба, которая регистрируется в контейнере DI и запускается при запуске приложения. С этого момента он будет отслеживать ваши BackgroundQueue
и отрабатывать задания по мере их постановки в очередь.
Упрощенная примерная реализация этой фоновой службы без регистрации и обработки ошибок может выглядеть следующим образом:
public class QueuedHostedService : BackgroundService
{
private readonly IBackgroundQueue _backgroundQueue;
public QueuedHostedService(IBackgroundQueue backgroundQueue)
{
_backgroundQueue = backgroundQueue;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var workItem = await _backgroundQueue.DequeueAsync(stoppingToken);
await workItem(stoppingToken);
}
}
}