Завершение текущих запросов при остановке собственного сервера owin
У меня есть OWIN сервер как часть консольного приложения. Вы можете увидеть основной метод здесь:
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...");
}
}
Когда обработка запроса немного дольше и в то же время пользователь нажимает CTRL + C, чтобы остановить приложение, обработка запроса немедленно останавливается и ответ не отправляется. Можно ли изменить это поведение? Я хотел бы отклонить все новые запросы, но подождите, пока запросы, которые в данный момент обрабатываются, не будут выполнены, и после этого остановите сервер.
Моя первоначальная идея - создать промежуточное программное обеспечение OWIN, которое будет отслеживать запросы, которые в данный момент обрабатываются, и откладывать действие остановки до тех пор, пока все не будет сделано. Промежуточное программное обеспечение также будет закорачивать все запросы на этапе остановки. Но это решение не звучит хорошо для меня.