Есть ли функция отключения при использовании Microsoft.AspNet.Server.Kestrel
? Ядро ASP.NET(ранее ASP.NET vNext) явно имеет последовательность запуска, но не упоминает о последовательности выключения и о том, как обрабатывать чистое закрытие.
Функция остановки Kestrel в Startup.cs в ASP.NET Core
Ответ 1
В ASP.NET Core вы можете зарегистрироваться на токенах отмены, предоставляемых IApplicationLifetime
public class Startup
{
public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime)
{
applicationLifetime.ApplicationStopping.Register(OnShutdown);
}
private void OnShutdown()
{
// Do your cleanup here
}
}
IApplicationLifetime
также выводит токены отмены для ApplicationStopped
и ApplicationStarted
, а также метод StopApplication()
для остановки приложения.
Ответ 2
В дополнение к исходному ответу, у меня была ошибка при попытке связать IApplicationLifetime внутри конструктора.
Я решил это, выполнив:
public class Startup
{
public void Configure(IApplicationBuilder app)
{
var applicationLifetime = app.ApplicationServices.GetRequiredService<IApplicationLifetime>();
applicationLifetime.ApplicationStopping.Register(OnShutdown);
}
private void OnShutdown()
{
// Do your cleanup here
}
}