簡體   English   中英

trhow異常時如何停止windows服務? 網絡核心

[英]How to stop windows service when trhow exception? NET CORE

我在 .NET 核心 3.1 中有一個 Windows 服務的示例。

我正在生成一個故意錯誤以查看其行為,我的想法是當異常發生時我想調用 StopAsync 方法來停止服務,但是一旦執行 StopAsync 再次執行 ExecuteAsync 方法並且服務不會停止,像這樣進入無限循環。

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {

        await Task.CompletedTask;

        while (!stoppingToken.IsCancellationRequested)
        {
            try
            {
                int num = 233;
                int result = num / 0;

                //todo
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                await StopAsync(stoppingToken); //this execute, but it keeps running this ExecuteAsync method
            }
        }
    }


    public override async Task StopAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("stop service");
        await base.StopAsync(cancellationToken);
    }

ExecuteAsync 方法再次執行,服務沒有停止,像這樣進入無限循環。

您確定嗎? StopAsync將取消提供給ExecuteAsync的令牌,看起來您的ExecuteAsync方法將在這種情況下完成。

但是,主機應用程序本身將繼續運行; 也許這就是你所看到的。 要在后台服務退出時關閉宿主應用程序, 您需要顯式停止應用程序

private readonly IHostApplicationLifetime _hostApplicationLifetime;
public MyBackgroundService(IHostApplicationLifetime hostApplicationLifetime) =>
    _hostApplicationLifetime = hostApplicationLifetime;

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    try
    {
        ...
    }
    finally
    {
        _hostApplicationLifetime.StopApplication();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM