Graceful shutdown и запросы в состоянии обработки

268
21 сентября 2018, 11:10

Реализовываю Graceful shutdown на ASP.NET Core 2.1. Заметил, что при вызове SIGINT или Ctrl+C в консоли все запросы, которые обрабатываются в данный момент, прерываются. Соответственно, если Controller через свои Action выполняет какие-либо запросы в DB без транзакций, система может оказаться в неконсистентном состоянии.

Из описания IApplicationLifetime https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.hosting.iapplicationlifetime?view=aspnetcore-2.1

Рассмотрим событие ApplicationStopping

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();
    }

Контроллер:

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

"Finished" не будет выведено, если послать сигнал о завершении.

READ ALSO
Как преобразовать &ldquo;\\n&rdquo;, &ldquo;\\t&rdquo; в &ldquo;\n&rdquo;, &ldquo;\t&rdquo;

Как преобразовать “\\n”, “\\t” в “\n”, “\t”

Я беру из текстового файла содержимое вида:

243
Как вывести результат SQL запроса в .net core?

Как вывести результат SQL запроса в .net core?

Есть RAW SQL запрос с параметрами реализующий Full-text searchНеобходимо преобразовать результаты запроса в список

237
Как узнать цвет фона документа с помощью OpenXml?

Как узнать цвет фона документа с помощью OpenXml?

Можна пройтись по элементам документа

230
Настройка ScintillaNet

Настройка ScintillaNet

Через NuGet установил ScintillaNet, в панели элементов появился соответствующий элемент и я добавил его на формуКак теперь реализовать подсветку...

275