1

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

从队列中删除项目是手动调用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. 这是正确的方式还是执行的事情?

4

2 回答 2

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*
}
于 2013-10-25T08:58:54.043 回答
1

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

于 2013-10-25T08:58:24.927 回答