我必须处理队列中的项目。
从队列中删除项目是对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
中。这是正确的方式还是表演的东西?
答案 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块始终执行,即使它抛出未处理的错误(除非它结束应用程序)。是的。