using Autofac; using OpenAuth.App.ServiceApp.DroneDocking; namespace OpenAuth.WebApi.SystemTask; public class DelayedExecutionService : BackgroundService { private readonly ILogger _logger; private readonly ILifetimeScope _lifetimeScope; public DelayedExecutionService(ILogger logger, ILifetimeScope lifetimeScope) { _logger = logger; //_droneDockApp = droneDockApp; _lifetimeScope = lifetimeScope; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { _logger.LogInformation("定时任务已启动,将每5秒执行一次"); while (!stoppingToken.IsCancellationRequested) { try { await PerformDelayedTask(); // 等待5秒 await Task.Delay(TimeSpan.FromMinutes(5), stoppingToken); } catch (OperationCanceledException) { _logger.LogInformation("无人机状态上报任务被取消"); break; } catch (Exception ex) { _logger.LogError(ex, "无人机状态上报任务发生错误"); // 即使出错也继续下一次执行 await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken); } } } private async Task PerformDelayedTask() { await using (var scope = _lifetimeScope.BeginLifetimeScope()) { // 2. 从子作用域中解析 AppService 实例(InstancePerLifetimeScope 服务) var appService = scope.Resolve(); try { // 3. 调用 app 服务类的方法 await appService.ReportDroneStatus(); _logger.LogInformation("ReportDroneStatus 方法执行成功"); } catch (Exception ex) { _logger.LogError(ex, "ReportDroneStatus 方法执行失败"); } } // 4. 子作用域释放,AppService 及内部资源(如数据库连接)自动释放 await Task.CompletedTask; } }