QueueWorker.cs 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using Microsoft.Extensions.Hosting;
  5. using Microsoft.Extensions.Logging;
  6. using WebApplication3.Clases;
  7. using System.IO;
  8. using WebApplication3.Controllers;
  9. using WebApplication3.Models;
  10. namespace WebApplication3.Clases
  11. {
  12. public class QueueWorker : BackgroundService
  13. {
  14. private readonly ILogger<QueueWorker> _logger;
  15. private ServicioController servicioController;
  16. private SimulacionController simulacionController;
  17. private ServiceQueueController serviceQueueController;
  18. public QueueWorker(ILogger<QueueWorker> logger)
  19. {
  20. _logger = logger;
  21. var aquiferContext = new AquiferContext();
  22. simulacionController = new SimulacionController(aquiferContext);
  23. serviceQueueController = new ServiceQueueController(aquiferContext);
  24. }
  25. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  26. {
  27. while (!stoppingToken.IsCancellationRequested)
  28. {
  29. _logger.LogInformation("HEY QUEUE WORKER HERE", DateTimeOffset.Now);
  30. var serviceRunning = await serviceQueueController.ServiceRunning();
  31. _logger.LogInformation(serviceRunning.ToString(), DateTimeOffset.Now);
  32. if (serviceRunning == false)
  33. {
  34. _logger.LogInformation("NOTHING RUNNING", DateTimeOffset.Now);
  35. var nextInQueue = serviceQueueController.GetNextInQueue();
  36. if (nextInQueue != null)
  37. {
  38. _logger.LogInformation("RUNNING A SIM", DateTimeOffset.Now);
  39. _logger.LogInformation(nextInQueue.Id.ToString(), DateTimeOffset.Now);
  40. //Actualizamos el estado del item del servicio/simulacion a ejecutar
  41. //await serviceQueueController.SetCorriendo(nextInQueue.Id);
  42. //Se ejecuta la simulacion
  43. await simulacionController.SimulaAsync(nextInQueue);
  44. ////Se actualiza el estado del item ya que ha terminado su ejecucion
  45. //await serviceQueueController.SetTerminado(nextInQueue.Id);
  46. }
  47. }
  48. await Task.Delay(TimeSpan.FromMinutes(2), stoppingToken);
  49. }
  50. }
  51. public void LogInfo(string msg)
  52. {
  53. _logger.LogInformation(msg);
  54. }
  55. }
  56. }