我必須處理隊列中的項目。嘗試內部捕獲以確保最終執行
從隊列中刪除項目是手動撥打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
中。這是正確的方式還是表演的東西?
'即使在catch塊中拋出異常時,finally塊也會執行。' - 我沒有意識到這一點。很好,謝謝。 – davenewza
@Alireza'它仍然未處理',除非和直到它被其他人抓住 –
你提出的和PO的區別在於他的代碼捕獲了任何可捕獲的異常 – Alireza