程序终止时不处理被调用

时间:2019-01-30 21:21:08

标签: ms-extensions-logging

我已经为Microsoft.Extensions.Logging编写了自定义提供程序。

提供程序在内部创建3个在前台运行的线程,并使用EasyNetQ与RabbitMQ服务器进行通信。

其中一个线程正在从阻塞收集中读取日志消息,并将其发布到Rabbit Server。其他两个线程由EasyNetQ管理。

当调用我的提供程序的dispose方法时,踏板将正确终止。我测试以确保。

当我的应用程序关闭时,不会调用 Microsoft.Extensions.Logging.LoggerFactory :: Dispose 方法。结果,前台线程没有终止。

我还钩上了 AppDomain.CurrentDomain.DomainUnload 事件,以便可以调用提供程序的dispose方法。

我确定我有22种情况。由于线程仍在运行,GC并未调用LoggerFactory或我的提供程序的dispose方法。线程正在等待被告知终止。

我知道我可以将线程设置为后台,并且一切都会清理。这是不理想的,因为我正在向Rabbit服务器发送应用程序日志消息。我想在应用程序终止之前将阻塞集合中的所有消息发送到服务器。

任何建议都值得赞赏。

谢谢

0 个答案:

没有答案