Net Core Worker Service向主线程发送异常?

时间:2019-10-16 20:54:25

标签: c# background-task .net-core-3.0

如果重试失败,则需要从Main返回退出代码-1,以便(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 :(得分:0)

有趣的话题。我创建了PoC,但在Asp .NET Core 2.1(我现在没有版本3)中创建了PoC,并且可以使用以下命令返回其他退出代码:

Environment.ExitCode

文档:https://docs.microsoft.com/en-us/dotnet/api/system.environment.exitcode?view=netcore-3.0

因此,请尝试执行以下操作:

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