.NET Worker应用优雅关闭时长限制及可配置性技术问询
.NET Worker 应用优雅关闭时长相关问题解答
默认时长与.NET版本的关系
- .NET 6及更早版本:默认优雅关闭超时为5秒。从测试案例中可验证:关闭时执行
await Task.Delay(5000)能完整走完优雅关闭逻辑;而await Task.Delay(6000)超过5秒超时阈值,宿主会强制终止进程,导致后续优雅关闭代码无法执行。 - .NET 7及之后版本:默认优雅关闭超时调整为25秒。测试中
await Task.Delay(25000)能完成优雅关闭流程,若超时超过30秒则会被强制终止,与该版本的默认设定一致。
是否仅依赖.NET版本?
不是。虽然默认的优雅关闭时长由.NET版本定义,但开发者可以通过配置自定义该时长,因此它并不完全依赖于.NET版本。
是否支持配置?
支持,常用配置方式有两种:
1. 通过配置文件设置
在appsettings.json中添加Host节点配置:
{ "Host": { "ShutdownTimeout": "00:00:30" // 自定义为30秒,格式为HH:mm:ss } }
2. 通过代码直接配置
构建Host时,使用UseShutdownTimeout方法指定超时时间:
IHost host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddHostedService<Worker>(); }) .UseShutdownTimeout(TimeSpan.FromSeconds(30)) // 自定义超时为30秒 .Build();
内容的提问来源于stack exchange,提问作者Jesús López
相关产品推荐
相关产品推荐

