Files
parr_api/PARR.AIHITSyncerWorker/Worker.cs

64 lines
2.2 KiB
C#

using PARR.AIHITMainSyncer;
namespace PARR.AIHITSyncerWorker
{
public class Worker : BackgroundService
{
private readonly ILogger<Worker> _logger;
private readonly IAihitMainSyncer aihitSyncer;
public Worker(ILogger<Worker> logger, IAihitMainSyncer aihitSyncer)
{
_logger = logger;
this.aihitSyncer = aihitSyncer;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
//await aihitSyncer.StartAsync();
//await Task.Delay(Timeout.Infinite, stoppingToken);
while (!stoppingToken.IsCancellationRequested)
{
try
{
await aihitSyncer.StartAsync();
await Task.Delay(Timeout.Infinite, stoppingToken);
// Åñëè StartAsync çàâåðøàåòñÿ (à íå âèñèò â âå÷íîì îæèäàíèè),
// òî, âåðîÿòíî, íóæíî äîáàâèòü Task.Delay èëè break.
// Íî ñóäÿ ïî êîäó — StartAsync — ýòî äîëãîæèâóùàÿ ïîäïèñêà,
// çíà÷èò, îí **íå äîëæåí çàâåðøàòüñÿ** áåç èñêëþ÷åíèÿ.
// Ïîýòîìó, åñëè îí çàâåðøèëñÿ — îøèáêà.
_logger.LogWarning("AihitMainSyncer çàâåðøèë ðàáîòó íåîæèäàííî. Ïåðåçàïóñê ÷åðåç 10 ñåê...");
}
catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested)
{
// Îæèäàåìîå çàâåðøåíèå ïðè îñòàíîâêå õîñòà
break;
}
catch (Exception ex)
{
_logger.LogError(ex, "Íåîáðàáîòàííîå èñêëþ÷åíèå â Worker. Ïîâòîðíàÿ ïîïûòêà ÷åðåç 10 ñåê...");
}
try
{
await Task.Delay(TimeSpan.FromSeconds(10), stoppingToken);
}
catch (OperationCanceledException)
{
break;
}
}
}
public override Task StopAsync(CancellationToken cancellationToken)
{
aihitSyncer.StopAsync();
return base.StopAsync(cancellationToken);
}
}
}