Net Core Worker Service отправляет исключение в основной поток? - PullRequest
1 голос
/ 16 октября 2019

Мне нужно вернуть код выхода -1 из Main, если повторная попытка не удалась, поэтому (Kubernetes) его обработал, я пытаюсь вызвать исключение (Task.FromException) из ExecuteAsync, но сигнатура метода изменится, и ее нельзя будет изменитьот Task до Task<T>. Как я могу поднять Environment.Exit(-1) в основной поток? или отмена в основной поток, чтобы я мог вернуть код выхода -1 оттуда

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    int tries = 0;
    while (!stoppingToken.IsCancellationRequested && tries <= _tryOuts)
    {
        try
        {
                ...
                tries++;
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                ...
                if (response.StatusCode == System.Net.HttpStatusCode.OK)
                {
                    break;
                }
                else
                {
                    _logger.LogError(response.Message, DateTimeOffset.Now);
                }
            }
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, ex.Message);
        }
        _logger.LogDebug("Worker next iteration in milliseconds {0}", _timeBetweenTryOuts);
        await Task.Delay(_timeBetweenTryOuts, stoppingToken);
    }
    _hostApplicationLifetime.StopApplication();
}

1 Ответ

0 голосов
/ 17 октября 2019

Интересная тема. Я создал PoC, но в Asp .NET Core 2.1 (у меня сейчас нет версии 3), и я могу вернуть другой код завершения, используя:

Environment.ExitCode

Документация: https://docs.microsoft.com/en-us/dotnet/api/system.environment.exitcode?view=netcore-3.0

Итак, попробуйте сделать что-то вроде:

Environment.ExitCode = -1;
_hostApplicationLifetime.StopApplication();
...