47 lines
1.4 KiB
C#
47 lines
1.4 KiB
C#
|
|
using OpenAuth.App.ServiceApp.DroneDocking;
|
|||
|
|
|
|||
|
|
namespace OpenAuth.WebApi.SystemTask;
|
|||
|
|
|
|||
|
|
public class DelayedExecutionService : BackgroundService
|
|||
|
|
{
|
|||
|
|
private readonly ILogger<DelayedExecutionService> _logger;
|
|||
|
|
private readonly DroneDockApp _droneDockApp;
|
|||
|
|
|
|||
|
|
public DelayedExecutionService(ILogger<DelayedExecutionService> 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.FromSeconds(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;
|
|||
|
|
}
|
|||
|
|
}
|