尝试内部捕获以确保最终执行

时间:2013-10-25 08:52:54

标签: c# .net exception-handling try-catch try-catch-finally

我必须处理队列中的项目。

从队列中删除项目是对Queue.DeleteMessage的手动调用。无论处理是否成功,都需要发生这种情况。

var queueMessage = Queue.GetMessage();

try
{
    pipeline.Process(queueMessage);
}
catch (Exception ex)
{
    try
    {
        Logger.LogException(ex);
    }
    catch { }
}
finally
{
    Queue.DeleteMessage(queueMessage);
}

问题:

失败时,我将错误记录到某个数据存储中。如果此日志记录失败(可能数据存储不可用),我仍然需要从队列中删除该消息。

我已将LogException电话打包在另一个try catch中。这是正确的方式还是表演的东西?

2 个答案:

答案 0 :(得分:2)

以下代码就足够了。即使在finally块中抛出异常,catch块也会执行。

var queueMessage = Queue.GetMessage();    
try
{
    pipeline.Process(queueMessage);
}
catch (Exception ex)
{
    Logger.LogException(ex);
}
finally
{
    Queue.DeleteMessage(queueMessage);//Will be executed for sure*
}

答案 1 :(得分:1)

finally块始终执行,即使它抛出未处理的错误(除非它结束应用程序)。是的。