using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Hosting; using AsbCloudApp.Services; 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) { try { while (!token.IsCancellationRequested) { if (tasksQueue.TryDequeue(out var item)) await Task.Run(()=>item.action(item.id), token); else await Task.Delay(100, token); } } catch { //logger ? } } public override async Task StopAsync(CancellationToken token) { await base.StopAsync(token); } } }