64 lines
2.2 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|