diff --git a/FastGithub.Dns.DnscryptProxy/DnscryptProxyHostedService.cs b/FastGithub.Dns.DnscryptProxy/DnscryptProxyHostedService.cs index 3a8974c..9890585 100644 --- a/FastGithub.Dns.DnscryptProxy/DnscryptProxyHostedService.cs +++ b/FastGithub.Dns.DnscryptProxy/DnscryptProxyHostedService.cs @@ -10,7 +10,7 @@ namespace FastGithub.Dns.DnscryptProxy /// /// DnscryptProxy后台服务 /// - sealed class DnscryptProxyHostedService : IHostedService + sealed class DnscryptProxyHostedService : BackgroundService { private const string dnscryptProxyFile = "dnscrypt-proxy"; private readonly ILogger logger; @@ -29,7 +29,7 @@ namespace FastGithub.Dns.DnscryptProxy /// /// /// - public Task StartAsync(CancellationToken cancellationToken) + public override Task StartAsync(CancellationToken cancellationToken) { try { @@ -48,7 +48,8 @@ namespace FastGithub.Dns.DnscryptProxy { this.logger.LogWarning($"{dnscryptProxyFile}启动失败:{ex.Message}"); } - return Task.CompletedTask; + + return base.StartAsync(cancellationToken); } /// @@ -56,7 +57,7 @@ namespace FastGithub.Dns.DnscryptProxy /// /// /// - public Task StopAsync(CancellationToken cancellationToken) + public override Task StopAsync(CancellationToken cancellationToken) { try { @@ -76,9 +77,26 @@ namespace FastGithub.Dns.DnscryptProxy { this.logger.LogWarning($"{dnscryptProxyFile}停止失败:{ex.Message}"); } - return Task.CompletedTask; + return base.StopAsync(cancellationToken); } + /// + /// 后台任务 + /// + /// + /// + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + while (stoppingToken.IsCancellationRequested == false) + { + await Task.Delay(TimeSpan.FromSeconds(10d), stoppingToken); + var processes = Process.GetProcessesByName(dnscryptProxyFile); + if (processes.Length == 0) + { + this.logger.LogError($"检测到{dnscryptProxyFile}已停止运行,{nameof(FastGithub)}将无法使用。你可以把配置文件的PureDns修改为其它可用的DNS以临时使用。"); + } + } + } /// /// 启动DnscryptProxy进程