Worker.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using IMCS.CCS.Entitys;
  2. using IMCS.CCS.Service;
  3. using Microsoft.Extensions.Hosting;
  4. using Microsoft.Extensions.Logging;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. namespace IMCS.CCS
  11. {
  12. public class Worker : BackgroundService
  13. {
  14. private readonly ILogger<Worker> _logger;
  15. private readonly ITaskService _taskService;
  16. public Worker(ILogger<Worker> logger, ITaskService taskService)
  17. {
  18. _logger = logger;
  19. _taskService = taskService;
  20. }
  21. public override async Task StartAsync(CancellationToken cancellationToken)
  22. {
  23. _logger.LogInformation($"程序服务开始 : {DateTime.Now}");
  24. #region 对任务数据 状态 重置
  25. var result = (await _taskService.FindListAsync())?.ToList() ?? new List<Tasks>();
  26. foreach (var item in result.Where(w => w.State == StateEnum.运行中))
  27. {
  28. item.State = StateEnum.未运行;
  29. item.ExecuteTime = null;
  30. await _taskService.SaveAsync(item);
  31. //自动恢复任务机制
  32. try
  33. {
  34. await _taskService.RunByIdAsync(item.Id.Value);
  35. }
  36. catch (Exception ex)
  37. {
  38. _logger.LogError(ex, $"自动开启任务错误 [{DateTime.Now}] : {ex.Message}");
  39. }
  40. }
  41. #endregion
  42. await base.StartAsync(cancellationToken);
  43. }
  44. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  45. {
  46. //while (!stoppingToken.IsCancellationRequested)
  47. //{
  48. // _logger.LogInformation("服务运行中 : {time}", DateTimeOffset.Now);
  49. // await Task.Delay(1000, stoppingToken);
  50. //}
  51. await Task.CompletedTask;
  52. }
  53. public override async Task StopAsync(CancellationToken cancellationToken)
  54. {
  55. _logger.LogError($"程序服务结束 : {DateTime.Now}");
  56. await base.StopAsync(cancellationToken);
  57. }
  58. public override void Dispose()
  59. {
  60. _logger.LogInformation($"程序服务 Dispose 释放 : {DateTime.Now}");
  61. base.Dispose();
  62. }
  63. }
  64. }