【发布时间】:2019-01-15 15:59:33
【问题描述】:
在我的.NET Core 2.1 应用程序中,我有一个从BackgroundService 类继承的服务,它在一个新线程上启动一个长时间运行的服务。然后,该服务会访问一个作用域服务,该服务从数据库中读取数据并发送一些电子邮件。我正在尝试测试我对应用程序正常关闭的处理,但在我的测试场景中遇到了一个奇怪的问题。
在阅读了BackgroundService 的 MSDN 博客条目后,提到:
“默认情况下,取消令牌设置为 5 秒超时,尽管您可以在构建 WebHost 时使用 IWebHostBuilder 的 UseShutdownTimeout 扩展更改该值。这意味着我们的服务预计将在 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");
【问题讨论】:
标签: c# asp.net-core background-service