延长Azure应用程序服务中正常关闭的超时时间



设置

我正在使用IHostApplicationLifetime.ApplicationStopping.Register()注册一种方法,用于在使用Azure门户中的停止按钮停止时优雅地关闭Azure应用程序服务(.NET 6.0、Windows 64位、托管管道版本:"集成")。出于测试目的,我在回调方法中添加了以下循环,以模拟缓慢关闭:

for (int i = 0; i < 300; i++) // wait 5 mins
{
Thread.Sleep(TimeSpan.FromSeconds(1));
Console.WriteLine($"Waited {(i + 1) * 1} s.");
}

问题

单击Azure门户中应用程序服务页面上的停止按钮可以正确调用回调,但在大约30秒后仍会终止进程,如日志所示。期望的行为是在进程退出之前看到完整的300秒记录在输出中。

到目前为止我尝试了什么

增加Program.Main:中的关闭超时

WebHost.CreateDefaultBuilder(args)
.UseShutdownTimeout(TimeSpan.FromMinutes(10)) // give enough time for graceful shutdown
.UseStartup<Startup>();

增加web.config:中的停机时间限制

<aspNetCore shutdownTimeLimit="600" processPath=".MyService.exe" hostingModel="inprocess" />

这些解决方案都不起作用。

我几乎可以肯定,这个系统不是为你简单地放置一个在关闭时停止的循环而设计的。它会在某个时刻意识到完成线程没有意义,并终止它

尝试制作一个响应时间长的API,或者其他不是简单循环的东西。然后用它来代替。

你决定在这里尝试的是浪费资源,而且没有适当的流程文档;你应该尝试其他方法,如果问题仍然存在,就制造问题。

最新更新