using AsbCloudApp.Services; using Microsoft.Extensions.Hosting; using System.Threading; using System.Threading.Tasks; namespace AsbCloudInfrastructure.Services { public class BackgroundWorkerService : BackgroundService { private readonly IBackgroundQueue tasksQueue; public BackgroundWorkerService(IBackgroundQueue tasksQueue) { this.tasksQueue = tasksQueue; } protected override async Task ExecuteAsync(CancellationToken token) { while (!token.IsCancellationRequested) { try { if (tasksQueue.TryDequeue(out var item)) await Task.Run(() => item.action(item.id), token).ConfigureAwait(false); else await Task.Delay(100, token).ConfigureAwait(false); } catch { //logger ? } } } public override async Task StopAsync(CancellationToken token) { await base.StopAsync(token).ConfigureAwait(false); } } }