Избавиться от вызова при завершении программы - PullRequest
0 голосов
/ 31 января 2019

Я написал собственного провайдера для Microsoft.Extensions.Logging.

Провайдер внутренне создает 3 потока, которые работают на переднем плане, и использует EasyNetQ для связи с сервером RabbitMQ.

Один из потоков читает сообщения журнала из блокирующей коллекции и публикует их на Rabbit Server.Два других потока управляются EasyNetQ.

Протекторы будут корректно завершаться при вызове метода dispose моего провайдера.Я проверил, чтобы убедиться.

Когда мое приложение закрывается, метод Microsoft.Extensions.Logging.LoggerFactory :: Dispose не вызывается.В результате потоки переднего плана не завершаются.

Я также перехватил событие AppDomain.CurrentDomain.DomainUnload , чтобы я мог вызвать метод удаления своих провайдеров.

I 'Я уверен, что у меня есть 22 ситуации.GC не вызывает методы утилизации LoggerFactory или моего провайдера, потому что потоки все еще работают.Потоки ждут, чтобы им сказали прекратить.

Я знаю, что могу установить потоки в качестве фона, и все очистится.Это нежелательно, поскольку я отправляю сообщения журнала приложений на сервер Rabbit.Я хотел бы получить все сообщения, которые находятся в коллекции блокировок, на сервер до завершения работы приложения.

Любые предложения приветствуются.

Спасибо

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