我的应用程序使用本地私有MessageQueue(@".\private$\queuename")
对来自其多个线程的消息进行排序,并且已经成功完成了很长时间。最近,发生了一个错误,该错误导致其中的一些消息基本消失而没有任何痕迹。从应用程序的内部日志记录和目击者帐户来看,Send(msg)
方法似乎无法将消息放入队列中,并且未引发任何错误。在调试器中,我通过使执行跳过Send()
调用来模拟了这种情况,并且生成的日志信息与实际错误发生中记录的内容匹配。
最令人不安的是,错误情况存在45分钟,在计算机重新启动和应用程序重新启动后一直存在,并且在重新启动后需要第二次重新启动才能最终清除它。
This unresolved post [^]提示消息可能会在预期的本地队列之外的其他地方结束。不幸的是,当我能够检查发生错误的系统时,所有可能存在的证据都已经消失了。我考虑过使用TimeToReachQueue
确认来检测Send()
调用的失败,但是MSDN断言here [^]“如果队列是本地的,则消息总是到达队列,”尽管此事件挑战了这一说法。
此错误的再次发生将是一个严重的问题,因此,如果我不能阻止它,则需要能够检测并报告它。不知道实际发生了什么,使得这两种选择都非常困难。