You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.9KB

  1. using HealthMonitor.Common;
  2. using HealthMonitor.Core.Common.Extensions;
  3. using HealthMonitor.Service.Sub;
  4. using TDengineDriver;
  5. using TDengineTMQ;
  6. namespace HealthMonitor.WebApi
  7. {
  8. public class Worker : BackgroundService
  9. {
  10. private readonly ILogger<Worker> _logger;
  11. private readonly TDengineDataSubcribe _tdEngineDataSubcribe;
  12. private CancellationTokenSource _tokenSource=default!;
  13. public Worker(ILogger<Worker> logger,TDengineDataSubcribe tdEngineDataSubcribe)
  14. {
  15. _logger = logger;
  16. _tdEngineDataSubcribe = tdEngineDataSubcribe;
  17. }
  18. public override Task StartAsync(CancellationToken cancellationToken)
  19. {
  20. _logger.LogInformation("------StartAsync");
  21. _tokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
  22. // 创建消费者
  23. _tdEngineDataSubcribe.CreateConsumer();
  24. return base.StartAsync(cancellationToken);
  25. }
  26. public override Task StopAsync(CancellationToken cancellationToken)
  27. {
  28. _logger.LogInformation("------StopAsync");
  29. _tokenSource.Cancel(); //停止工作线程
  30. // 关闭消费者
  31. _tdEngineDataSubcribe.CloseConsumer();
  32. return base.StopAsync(cancellationToken);
  33. }
  34. protected override Task ExecuteAsync(CancellationToken stoppingToken)
  35. {
  36. TaskFactory factory = new(_tokenSource.Token);
  37. factory.StartNew(() =>
  38. {
  39. if (_tokenSource.IsCancellationRequested)
  40. _logger.LogWarning("Worker exit");
  41. while (!_tokenSource.IsCancellationRequested)
  42. {
  43. _tdEngineDataSubcribe.ProcessMsg();
  44. }
  45. }, TaskCreationOptions.LongRunning);
  46. return Task.Delay(1000, _tokenSource.Token);
  47. }
  48. }
  49. }