64 lines
2.1 KiB
C#
64 lines
2.1 KiB
C#
using Autofac;
|
||
using OpenAuth.App.ServiceApp.DroneDocking;
|
||
|
||
namespace OpenAuth.WebApi.SystemTask;
|
||
|
||
public class DelayedExecutionService : BackgroundService
|
||
{
|
||
private readonly ILogger<DelayedExecutionService> _logger;
|
||
private readonly ILifetimeScope _lifetimeScope;
|
||
|
||
public DelayedExecutionService(ILogger<DelayedExecutionService> 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<DroneDockApp>();
|
||
try
|
||
{
|
||
// 3. 调用 app 服务类的方法
|
||
await appService.ReportDroneStatus();
|
||
_logger.LogInformation("ReportDroneStatus 方法执行成功");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_logger.LogError(ex, "ReportDroneStatus 方法执行失败");
|
||
}
|
||
}
|
||
|
||
await Task.CompletedTask;
|
||
}
|
||
} |