using Microsoft.Extensions.Hosting; using System; using System.Threading; using System.Threading.Tasks; namespace FastGithub.DomainResolve { /// /// 域名解析后台服务 /// sealed class DomainResolveHostedService : BackgroundService { private readonly DnscryptProxy dnscryptProxy; private readonly IDomainResolver domainResolver; private readonly TimeSpan testPeriodTimeSpan = TimeSpan.FromSeconds (1d); /// /// 域名解析后台服务 /// /// /// public DomainResolveHostedService( DnscryptProxy dnscryptProxy, IDomainResolver domainResolver) { this.dnscryptProxy = dnscryptProxy; this.domainResolver = domainResolver; } /// /// 后台任务 /// /// /// protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await this.dnscryptProxy.StartAsync(stoppingToken); while (stoppingToken.IsCancellationRequested == false) { await this.domainResolver.TestAllEndPointsAsync(stoppingToken); await Task.Delay(this.testPeriodTimeSpan, stoppingToken); } } /// /// 停止服务 /// /// /// public override Task StopAsync(CancellationToken cancellationToken) { this.dnscryptProxy.Stop(); return base.StopAsync(cancellationToken); } } }