为关键任务实施监督程序
本文关键字:程序 施监督 关键任务 | 更新日期: 2023-09-27 18:23:51
我有一个应用程序,可以在预定时间发送电子邮件。有时在发送电子邮件时应用程序会被卡住,我仍然不知道为什么。
我想过实现一个简单的看门狗,如下所示:在应用程序开始发送电子邮件之前,它会初始化看门狗的一个新实例。此实例启动一个一次性计时器。如果任务完成正常,我们会让看门狗知道它应该停止,并取消计时器。如果定时器定义的时间已经过去,我们将强制退出程序。
我不确定这是否是一个有效的解决方案,或者更像是一个黑客,如果您能提供任何关于这个主题。
谢谢,Omer
IMHO这不是个坏主意。
我在这里看到的主要陷阱不是技术性的,而是人性化的:一旦监管机构正常运作,并且做得很好,客户不再抱怨,就很容易只说"问题解决了!"而忘记最初的问题(往好了说是把它扔到积压中,往坏了说是"解决了")。
在技术方面:
你可能需要考虑看门狗和应用程序的隔离级别,以及看门狗的行为有多激烈。最小的隔离是让看门狗在不同的线程上运行(一次性计时器可以做到这一点)。最好让电子邮件机制和看门狗在不同的AppDomain上运行,这样看门狗就会在超时时卸载整个"电子邮件AppDomain"。这给了你一个类似于杀死这个过程的解决方案(至少在"有管理的"观点下),但比杀死这个过程并重新启动它更不暴力。
您还应该考虑竞争条件:看门狗的计时器和电子邮件发送过程正在竞争,这可能会在成功发送电子邮件后终止该过程,这可能进一步导致在重新启动应用程序时再次发送相同的电子邮件(这会导致客户体验不佳)。
正如评论员所说,我强烈建议您调试该问题。您需要使用生产调试工具和仪器,如跟踪、日志记录、生产时间调试器(如WinDbg)等,这些工具和仪器允许您诊断和调试不可再现的问题。