在我的.NET Core 2.1
应用程序中,我有一个从BackgroundService
类继承的服务,该类在新线程上启动了长期运行的服务。然后,此服务命中一个范围服务,该范围服务从数据库读取并发送一些电子邮件。我正在尝试测试对应用程序正常关闭的处理,但是在测试场景中遇到了一个奇怪的问题。
在阅读了BackgroundService的MSDN博客条目之后,提到了它:
“默认情况下,取消令牌设置为5秒钟超时,尽管您可以使用IWebHostBuilder的UseShutdownTimeout扩展名在构建WebHost时更改该值。这意味着我们的服务有望在5秒钟内取消,否则将被更突然杀死。”
以下代码会将时间更改为10秒。
WebHost.CreateDefaultBuilder(args)
.UseShutdownTimeout(TimeSpan.FromSeconds(10))
...
在我的Program.cs
文件中,我实现了此扩展方法(并且还尝试使用UseSettings
方法)来尝试扩展超时关机,如下所示:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog()
//.UseSetting(WebHostDefaults.ShutdownTimeoutKey, "20")
.UseShutdownTimeout(TimeSpan.FromSeconds(20))
.Build();
我的作用域服务中有一个断点,我在其中尝试通过设置10秒的等待时间并在线程等待时关闭控制台以启动关闭来测试此超时的增加。但是,我发现在启动关闭5秒钟后,该应用程序被杀死,好像它仍使用默认的5秒钟(而不是新的20秒钟)来关闭应用程序。
Log.Information("preparing to sleep thread for 10 seconds");
//Thread.Sleep(10000);
await Task.Delay(TimeSpan.FromSeconds(10));
Log.Information("thread awakened");
答案 0 :(得分:0)
我的特定ASP.NET控制台应用程序没有web.config文件,因此我创建了其中一个文件,然后将shutdownTimeLimit
属性添加到aspNetCore
模块部分。
<aspNetCore shutdownTimeLimit="20" processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false">