【问题标题】:Long running App, how handle Errors?长时间运行的应用程序,如何处理错误?
【发布时间】:2009-11-25 09:21:28
【问题描述】:

我必须实现一个信息终端。我选择 dot.net,终端只是一个触摸板。 所以这个系统运行 7 天 24 小时。

所以我调用 Web 服务,显示数据,显示网站内容。很多事情都可能出错。

您对这种情况有什么建议吗? try catch 中的每个函数? AppDomain.CurrentDomain.UnhandledException 事件?

谢谢安德烈亚斯

【问题讨论】:

    标签: c# .net error-handling usability


    【解决方案1】:

    基本上,您应该尽快处理任何错误 - 因此,如果您调用 web 服务,请将所有调用包装在 try/catch 块中并在那里处理错误 - 例如,您可以记录确切的错误, 将很多webservice相关的异常聚合成更通用的DataSourceFaultException(名称只是举例),然后UI会接收到,UI会很容易判断,因为通信失败,不能显示请求的信息,然后选择重试、通知用户或执行其他任何操作。

    但是 - 对于长时间运行的应用程序,您必须处理更多错误。它们中的许多都不容易预测,因为它们不一定与任何特定的调用相关 - 你可能会耗尽内存,递归可能会导致堆栈溢出,系统计时器可以达到它的最大值并从头开始等等。

    您不应该在每个方法中都处理这些错误,因为它只会损害代码的可读性并且容易出错。这些错误最好由 UnhandledException 事件处理。但是,您必须记住,当异常到达 UnhandledException 事件时,您不能对应用程序的状态做出任何假设——错误可能已经破坏了部分(甚至全部)内部状态。因此,当这种情况发生时,最好尝试创建错误日志并优雅地重新启动应用程序(不一定是整个应用程序 - 也许可以重新初始化应用程序的状态 - 如果是这样,那也是一个有效的选项。但是,你必须请注意,您将无法从某些错误中恢复并处理这种情况)。

    【讨论】:

    • 谢谢你的评论,你写的是“reinitialize application's state”,意思是重启应用?
    • 不一定,但这是最安全的方法。您可以尝试在不重新启动整个应用程序的情况下重新初始化状态,但您必须非常小心。
    • 可以这么说 = new myForm();
    【解决方案2】:

    视情况而定。

    如果您可以适当地处理函数中的异常 - 处理它。如果没有 - 创建一个全局异常处理程序来通知用户或记录它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多