Метод Application_end на моем веб-сайте ASP.NET MVC вызывается много раз странно, почти одновременно

Это веб-сайт ASP.NET MVC. Я добавляю некоторый журнал в методе Application_end.

Я знаю, что существуют некоторые обстоятельства, когда будет вызываться Application_end, например, перезапуск пула приложений, изменение файла web.config или изменение файла bin. Но моя проблема здесь очень странная. Метон Application_end на моем веб-сайте ASP.NET MVC вызывается много раз странно, почти одновременно.

Вот мой код:

protected void Application_end()
    {
        FileLog.Info("The website is starting to quit...", LogType.Info);
        PersistentService.RunSignal = false;
        //To wait for pesistent action finish
        Task.WaitAll(_tasks.ToArray(), 1000 * 300);
        FileLog.Info("The website finish quit...", LogType.Info);
    }

Вот мой лог-результат:

Как видите, Application_end вызывается 4 раза за одну секунду. Я думаю, это можно назвать один раз, если пул приложений перерабатывается в то время, но почему 4 раза?

Кто-нибудь может помочь? Благодарю.

Изменить: я заметил, что мой пул приложений с 5 рабочих процессов на макс. Будет ли конец каждого рабочего процесса вызывать метод Application_end?

2 ответа

Решение

Кажется, что он вызывается, когда заканчивается домен приложения, поэтому может иметь смысл, что он вызывается один раз для процесса:

The Application_Start and Application_End methods are special methods that do not
represent HttpApplication events. ASP.NET calls them once for the lifetime of the 
application domain, not for each HttpApplication instance.

С https://msdn.microsoft.com/en-us/library/ms178473.aspx

Вы используете параметр Maximum Worker Process = 5, который означает, что ваше приложение обслуживает до 5 процессов. Когда IIS сбрасывается, все процессы завершаются одновременно.

Другие вопросы по тегам