0

我有一个在预定时间发送电子邮件的应用程序。有时应用程序在发送电子邮件时卡住了,我仍然不知道为什么。

我想过像这样实现一个简单的看门狗:在应用程序开始发送电子邮件之前,它会初始化一个新的看门狗实例。此实例启动一次性计时器。如果任务正常完成 - 我们让看门狗知道它应该停止,并取消它的计时器。如果定时器定义的时间已经过去 - 我们强制退出程序。

我不确定这是否是一个有效的解决方案,或者更像是一个黑客,并希望得到有关此主题的任何意见。

谢谢, 奥马尔

4

1 回答 1

1

恕我直言,这不是一个坏主意。

我在这里看到的主要陷阱不是技术性的,而是人道的:一旦看门狗开始运作并且做得很好,并且客户不再抱怨,就太容易说“问题解决了!” 并忘记最初的问题(充其量将其扔到积压中,最坏的情况将其标记为“已解决”)。

在技​​术方面:

您可能要考虑看​​门狗和应用程序的隔离级别,以及看门狗的动作有多暴力。最小的隔离是让看门狗在不同的线程上运行(一次性计时器会这样做)。让电子邮件机制和看门狗在不同的 AppDomain 上运行可能会更好,因此看门狗会在超时时卸载整个“电子邮件 AppDomain”。这为您提供了与终止进程类似的解决方案(至少在“托管”观点下),但没有终止进程并重新启动它那么暴力。

您还应该考虑竞争条件:看门狗的计时器和电子邮件发送进程正在竞争,这可能会在成功发送电子邮件后终止进程,这可能会进一步导致在您重新启动时再次发送相同的电子邮件应用程序(这会导致糟糕的客户体验)。

正如评论员所说,我强烈建议您调试问题。您需要使用生产调试工具和工具,例如跟踪、日志记录、生产时调试器(如 WinDbg)等,以便诊断和调试不可重现的问题。

于 2013-07-18T16:11:07.650 回答