我已经为Microsoft.Extensions.Logging编写了自定义提供程序。
提供程序在内部创建3个在前台运行的线程,并使用EasyNetQ与RabbitMQ服务器进行通信。
其中一个线程正在从阻塞收集中读取日志消息,并将其发布到Rabbit Server。其他两个线程由EasyNetQ管理。
当调用我的提供程序的dispose方法时,踏板将正确终止。我测试以确保。
当我的应用程序关闭时,不会调用 Microsoft.Extensions.Logging.LoggerFactory :: Dispose 方法。结果,前台线程没有终止。
我还钩上了 AppDomain.CurrentDomain.DomainUnload 事件,以便可以调用提供程序的dispose方法。
我确定我有22种情况。由于线程仍在运行,GC并未调用LoggerFactory或我的提供程序的dispose方法。线程正在等待被告知终止。
我知道我可以将线程设置为后台,并且一切都会清理。这是不理想的,因为我正在向Rabbit服务器发送应用程序日志消息。我想在应用程序终止之前将阻塞集合中的所有消息发送到服务器。
任何建议都值得赞赏。
谢谢