Conclua as solicitações atuais ao parar o servidor owin auto-hospedado
Eu tenho o servidor OWIN como parte do aplicativo de console. Você pode ver o método principal aqui:
class Program
{
public static ManualResetEventSlim StopSwitch = new ManualResetEventSlim();
static void Main(string[] args)
{
Console.CancelKeyPress += (s, a) =>
{
a.Cancel = true;
StopSwitch.Set();
};
using (WebApp.Start<Startup>("http://+:8080/"))
{
Console.WriteLine("Server is running...");
Console.WriteLine("Press CTRL+C to stop it.");
StopSwitch.Wait();
Console.WriteLine("Server is stopping...");
}
Console.ReadKey();
Console.WriteLine("Server stopped. Press any key to close app...");
}
}
Quando o processamento da solicitação é um pouco mais longo e, ao mesmo tempo, o usuário pressiona CTRL + C para parar o aplicativo, o processamento da solicitação é interrompido imediatamente e a resposta não é enviada. É possível mudar esse comportamento? Gostaria de recusar todos os novos pedidos, mas aguarde até que os pedidos que estão em processamento no momento sejam concluídos e pare o servidor depois disso.
Minha idéia inicial é criar o middleware OWIN que acompanhará as solicitações que estão sendo processadas no momento e adiará a ação de parada até que tudo esteja pronto. O middleware também causaria um curto-circuito em todos os pedidos durante a fase de parada. Mas essa solução não me parece boa.