gpt4 book ai didi

c# - 正常关闭和当前正在处理的请求

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:23 24 4
gpt4 key购买 nike

我正在为 ASP.NET Core 2.1 正常关闭。我注意到所有在 Controller 上运行的请求都会在正常关闭开始时被取消。即使我希望所有请求在 Container 被释放之前成功完成。

根据IApplicationLifetime https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.hosting.iapplicationlifetime?view=aspnetcore-2.1

ApplicationStopping Triggered when the application host is performing a graceful shutdown. Requests may still be in flight. Shutdown will block until this event completes.

在所有当前请求完成之前,我该怎么做才能防止处置?

例子:

public static void Main(string[] args) { 
WebHostExtensions.Run(BuildWebHost(args));
}

private static IWebHost BuildWebHost(string[] args) {
return WebHostExtensions.CreateDefaultBuilder(args)
.UseSerilog()
.UseStartup<Startup>()
.UseUrls("http://0.0.0.0:9100")
.Build();
}

Controller :

public class UserOrdersController : Controller
{
public async Task<IActionResult> GetUserOrders(string productId)
{
await Task.Delay(5000);
Console.WriteLine("Finished");
//.....................................
}
}

所以如果我要求执行正常关机,“完成”将不会被打印

更新:向构建器添加了 .UseShutdownTimeout(TimeSpan.FromSeconds(10)) 但它没有帮助。

最佳答案

正如其他人所提到的,您期望的行为应该开箱即用。 SIGINT 应该触发正常关闭。我有一种感觉,您正在通过运行 Task.Delay 进行测试,该时间长于 Web 主机的默认关闭超时值。这将导致触发超时,这将终止所有当前正在运行的请求。

像这样设置网络主机关闭超时:

public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseShutdownTimeout(TimeSpan.FromSeconds(60)) // set timeout value here
.UseStartup<Startup>();
}
}

关于c# - 正常关闭和当前正在处理的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51482858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com