C# 为关键任务实施看门狗

C# 为关键任务实施看门狗,c#,.net,watchdog,C#,.net,Watchdog,我有一个在预定时间发送电子邮件的应用程序。 有时发送电子邮件时应用程序会被卡住,我仍然不知道为什么 我想实现一个简单的看门狗,如下所示: 在应用程序开始发送电子邮件之前,它会初始化看门狗的一个新实例。 此实例启动一个一次性计时器。 如果任务完成正常-我们让看门狗知道它应该停止,它会取消计时器。 如果计时器定义的时间已过-我们将强制退出程序 我不确定这是否是一个有效的解决方案,或者更像是一个黑客,如果您能提供任何有关的信息,我将不胜感激 这个题目 谢谢,奥马尔,我觉得这不是个坏主意 我在这里看到的

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

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

我不确定这是否是一个有效的解决方案,或者更像是一个黑客,如果您能提供任何有关的信息,我将不胜感激 这个题目


谢谢,奥马尔,我觉得这不是个坏主意

我在这里看到的主要陷阱不是技术性的,而是人性化的:一旦看门狗开始运作,并且正确地做了它的事情,客户不再抱怨,就很容易说“问题解决了!”而忘记原来的问题(最好是把它扔到积压工作中,最坏的情况是把它标记为“已解决”)

在技术方面:

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

你也应该考虑竞争条件:看门狗的计时器和电子邮件发送过程都是竞争的,这可能会在电子邮件成功发送后导致进程被破坏,这可能会导致在重新启动应用程序时再次发送相同的电子邮件(这会导致糟糕的客户体验)。


正如评论员所说,我强烈建议您调试这个问题。您需要使用生产调试工具和仪器,如跟踪、日志记录、生产时间调试器(如WinDbg)等,这些工具和仪器允许您诊断和调试不可复制的问题。

您可能首先想弄清楚它“卡住”的原因。然后,你可以考虑有效的应对措施,可能包括看门狗任务或其他。这是一种黑客行为。但当最后期限临近时,你可以侥幸逃脱。在你实施了这个黑客攻击之后,集中精力找出“应用程序卡住”的原因。这个错误通常发生在一些“快乐”客户的系统上,不会重现等等。顺便说一句,检查你的电子邮件。谢谢,但如果是一个简单的问题,比如电子邮件设置,我早就解决了。问题发生在应用程序正常运行数周后。这也不是内存泄漏问题。惊人的答案,特别是“问题已解决”:)。是否有重置窗口的内置策略?(重新启动计算机)