using OpenAuth.App.ServiceApp.DroneDocking; namespace OpenAuth.WebApi.SystemTask; public class DelayedExecutionService : BackgroundService { private readonly ILogger _logger; private readonly DroneDockApp _droneDockApp; public DelayedExecutionService(ILogger logger, DroneDockApp droneDockApp) { _logger = logger; _droneDockApp = droneDockApp; } 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 _droneDockApp.ReportDroneStatus(); await Task.CompletedTask; } }