Я написал собственного провайдера для Microsoft.Extensions.Logging.
Провайдер внутренне создает 3 потока, которые работают на переднем плане, и использует EasyNetQ для связи с сервером RabbitMQ.
Один из потоков читает сообщения журнала из блокирующей коллекции и публикует их на Rabbit Server.Два других потока управляются EasyNetQ.
Протекторы будут корректно завершаться при вызове метода dispose моего провайдера.Я проверил, чтобы убедиться.
Когда мое приложение закрывается, метод Microsoft.Extensions.Logging.LoggerFactory :: Dispose не вызывается.В результате потоки переднего плана не завершаются.
Я также перехватил событие AppDomain.CurrentDomain.DomainUnload , чтобы я мог вызвать метод удаления своих провайдеров.
I 'Я уверен, что у меня есть 22 ситуации.GC не вызывает методы утилизации LoggerFactory или моего провайдера, потому что потоки все еще работают.Потоки ждут, чтобы им сказали прекратить.
Я знаю, что могу установить потоки в качестве фона, и все очистится.Это нежелательно, поскольку я отправляю сообщения журнала приложений на сервер Rabbit.Я хотел бы получить все сообщения, которые находятся в коллекции блокировок, на сервер до завершения работы приложения.
Любые предложения приветствуются.
Спасибо