Какой смысл иметь IHostApplicationLifetime, когда у вас есть IHostedService - PullRequest
1 голос
/ 29 мая 2020

Здравствуйте, мне интересно, почему у вас есть IHostApplicationLifetime с ApplicationStarted, ApplicationStopping, ApplicationStopped, когда на хосте IHostedService уже есть StartAsyn c и StopAsyn c?

Для простого консольного приложения, которое просто требует настройки и teardown IHostedService кажется достаточно, не так ли?

1 Ответ

0 голосов
/ 08 июня 2020

Мы можем только предполагать, что знаем, о чем на самом деле думали разработчики фреймворка. Первое, что приходит на ум, - это метод StopApplication. Это делает IHostedService удобным способом указать, что приложение должно остановиться. Либо из-за того, что все сделано (запуск приложения, опрос чего-либо, опрос результатов процесса, завершение и ожидание внешнего перезапуска по времени), либо из-за катастрофической ошибки c.

Я вижу, что три свойства вызвали OP может быть полезен в чрезвычайно сложном сценарии времени жизни ios, например, при взаимодействии IHostedServices. Согласно документации ApplicationStarted срабатывает, когда «хост приложения полностью запущен». Это «событие» может затем использоваться IHostedServices, чтобы знать, что другие службы доступны, и тогда «событие» ApplicationStopping будет указывать на то, что другие размещенные службы прекращают работу. Обратите внимание, что каждый IHostedService получает вызов StopAsyn c последовательно. Серийность означает, что одна служба может продолжать работать еще долго после завершения работы службы, от которой она зависит. То же самое «событие» в некоторых случаях может использоваться как подсказка IHostedService начать завершение работы, чтобы вызов StopAsyn c мог завершиться раньше и не повлиять на завершение работы хоста.

И да, для В простом случае нет необходимости вводить IHostedApplicationLifetime в IHostedService.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...