C# 处理未维护服务中的异常

C# 处理未维护服务中的异常,c#,exception-handling,C#,Exception Handling,编辑:请注意,这与我之前的问题无关。这是另一个话题 我正在编写一个应用程序,它将每隔30秒左右运行一次,以便在数据库中执行一些未处理的工作。它完全不需要监督或用户/管理员交互。但是,它要求在其App.config文件中正确定义某些参数,并且在应用程序启动时可以访问数据库。此外,所有可能最终发生的异常都需要记录,但程序可以很好地退出,因为它将在30秒后执行。。。在这段时间内,唯一需要做的事情就是确保数据库是可访问的,并且所有参数都是正确的。也就是说,在方法DoWork()中对整个行为进行编码,而在

编辑:请注意,这与我之前的问题无关。这是另一个话题

我正在编写一个应用程序,它将每隔30秒左右运行一次,以便在数据库中执行一些未处理的工作。它完全不需要监督或用户/管理员交互。但是,它要求在其
App.config
文件中正确定义某些参数,并且在应用程序启动时可以访问数据库。此外,所有可能最终发生的异常都需要记录,但程序可以很好地退出,因为它将在30秒后执行。。。在这段时间内,唯一需要做的事情就是确保数据库是可访问的,并且所有参数都是正确的。也就是说,在方法
DoWork()
中对整个行为进行编码,而在方法内部没有任何异常处理,然后将其放入
Main()
方法中,这是否可以接受/正确

try
{
     DoWork();
}
catch (Exception ThisException)
{
    /* Log exception. */
}

这取决于
DoWork()
的功能

例如,如果要打开和关闭文件或数据库连接,则需要特定的错误处理来安全地处置这些资源


当然,像这样尝试“一网打尽”也没有什么害处。

对于大多数例子来说,这应该是可以的。如上所述,关闭数据库连接并清理已使用的资源是不可忽略的。保留打开的文件句柄可能不好,并会阻止新的运行


此外,还有一些致命的异常(OutOfMemory、RunTimeException等)应该记录或发出某种形式的警报。

错误处理需要具体。如果您预计您的配置可能是错误的,请在那里进行检查,而不是抛出异常。如果它需要抛出异常,请专门为此编写一个try…catch。如果配置错误,您想做什么?关闭服务?是否使用默认设置

拥有一个catch-all可能是危险的,因为CLR抛出并捕获的任何异常都会在该块中被捕获。如果你发现一个异常,你的想法是用某种方式来处理它。如果该异常是内存不足异常,会发生什么情况?文件IO?还是DB

一些MSDN文章来备份我所说的:


尝试使用“using”语句,这些语句应该会在出现异常时清理您的资源。我特别说过,这将不时运行,因此您提到的这两个异常没有问题。代码的频率会如何影响异常的抛出?我试图建议您的异常处理应该是特定的,而不是一般的。