LASAPlatform/OpenAuth.WebApi/SystemTask/DelayedExecutionService.cs

61 lines
1.8 KiB
C#
Raw Normal View History

using Autofac;
2025-09-15 16:51:17 +08:00
using OpenAuth.App.ServiceApp.DroneDocking;
namespace OpenAuth.WebApi.SystemTask;
public class DelayedExecutionService : BackgroundService
{
private readonly ILogger<DelayedExecutionService> _logger;
2025-09-15 16:51:17 +08:00
private readonly ILifetimeScope _lifetimeScope;
2025-09-15 16:51:17 +08:00
public DelayedExecutionService(ILogger<DelayedExecutionService> logger, ILifetimeScope lifetimeScope)
{
_logger = logger;
2025-09-15 16:51:17 +08:00
//_droneDockApp = droneDockApp;
_lifetimeScope = lifetimeScope;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
_logger.LogInformation("定时任务已启动将每5分钟执行一次");
while (!stoppingToken.IsCancellationRequested)
{
try
{
await PerformDelayedTask();
await Task.Delay(TimeSpan.FromMinutes(5), stoppingToken);
}
catch (OperationCanceledException)
{
2025-09-06 09:46:27 +08:00
_logger.LogInformation("无人机状态上报任务被取消");
break;
}
catch (Exception ex)
{
2025-09-06 09:46:27 +08:00
_logger.LogError(ex, "无人机状态上报任务发生错误");
// 即使出错也继续下一次执行
await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
}
}
}
private async Task PerformDelayedTask()
{
var scope = _lifetimeScope.BeginLifetimeScope();
try
2025-09-15 16:51:17 +08:00
{
var appService = scope.Resolve<DroneDockApp>();
await appService.ReportDroneStatus();
_logger.LogInformation("ReportDroneStatus 方法执行成功");
}
catch (Exception ex)
{
_logger.LogError(ex, "ReportDroneStatus 方法执行失败");
}
finally
{
scope.Dispose();
2025-09-24 10:07:37 +08:00
}
}
}