我有一个可以在预定时间发送电子邮件的应用程序。有时应用程序在发送电子邮件时卡住了,我仍然不确定为什么。
我想像这样实现一个简单的watchdog :在应用程序开始发送电子邮件之前,它初始化watchdog的一个新实例。此实例启动一个一次性计时器。如果任务完成正常-我们让看门狗知道它应该停止,它取消它的计时器。如果定时器定义的时间段已过,我们将强制退出程序。
我不确定这是一个有效的解决方案,还是更像一个黑客,并感谢任何关于这个主题的意见。
谢谢,奥梅尔
发布于 2013-07-19 00:11:08
这不是个坏主意,我想。
我在这里看到的主要陷阱不是技术上的,而是人性化的:一旦看门狗可以运行并正确地完成了它的事情,客户不再抱怨,就很容易说“问题解决了!”忘记最初的问题(最好的情况下把它抛到积压中,最坏的情况下标记为“已解决”)。
在技术方面:
您可能需要考虑看门狗和应用程序的隔离级别,以及看门狗的操作有多激烈。最小的隔离是让看门狗在不同的线程上运行(一次性计时器会做到这一点)。让电子邮件机制和看门狗在不同的AppDomains上运行可能会更好,这样看门狗就会在超时时卸载整个“电子邮件AppDomain”。这为您提供了一个类似于终止进程的解决方案(至少在“托管”的观点下),但比终止进程并重新启动它要少一些。
您还应该考虑竞争条件:watchdog的计时器和电子邮件发送进程正在竞争,这可能会在成功发送电子邮件后终止该进程,这可能会进一步导致在您重新启动应用程序时再次发送相同的电子邮件(这会导致糟糕的客户体验)。
正如评论员所说,我强烈建议您调试问题。您将需要使用生产调试工具和工具,如跟踪、日志记录、生产时调试器(如WinDbg)等,它们允许您诊断和调试不可重现的问题。
https://stackoverflow.com/questions/17726292
复制相似问题