DomainResolveHostedService.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Microsoft.Extensions.Hosting;
  2. using System;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5. namespace FastGithub.DomainResolve
  6. {
  7. /// <summary>
  8. /// 域名解析后台服务
  9. /// </summary>
  10. sealed class DomainResolveHostedService : BackgroundService
  11. {
  12. private readonly DnscryptProxy dnscryptProxy;
  13. private readonly DomainSpeedTester speedTester;
  14. private readonly TimeSpan speedTestDueTime = TimeSpan.FromSeconds(10d);
  15. private readonly TimeSpan speedTestPeriod = TimeSpan.FromMinutes(2d);
  16. /// <summary>
  17. /// 域名解析后台服务
  18. /// </summary>
  19. /// <param name="dnscryptProxy"></param>
  20. /// <param name="speedTester"></param>
  21. public DomainResolveHostedService(
  22. DnscryptProxy dnscryptProxy,
  23. DomainSpeedTester speedTester)
  24. {
  25. this.dnscryptProxy = dnscryptProxy;
  26. this.speedTester = speedTester;
  27. }
  28. /// <summary>
  29. /// 后台任务
  30. /// </summary>
  31. /// <param name="stoppingToken"></param>
  32. /// <returns></returns>
  33. protected override async Task ExecuteAsync(CancellationToken stoppingToken)
  34. {
  35. await this.dnscryptProxy.StartAsync(stoppingToken);
  36. await Task.Delay(this.speedTestDueTime, stoppingToken);
  37. while (stoppingToken.IsCancellationRequested == false)
  38. {
  39. await this.speedTester.TestSpeedAsync(stoppingToken);
  40. await Task.Delay(this.speedTestPeriod, stoppingToken);
  41. }
  42. }
  43. }
  44. }