2013-10-25 4 views
1

실행합니다. 큐 오프마지막으로 보장하기 위해 내부 캐치를 시도 내가 큐 일회성 항목을 처리 할 필요가

삭제 항목 Queue.DeleteMessage에 수동 호출입니다. 이것은 처리가 성공했는지 여부에 관계없이 발생해야합니다.

var queueMessage = Queue.GetMessage(); 

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

는 문제 :

실패, 나는 몇 가지 데이터 저장소에 오류를 기록합니다. 이 로깅이 실패하면 (아마도 데이터 저장소를 사용할 수없는 경우) 대기열에서 메시지를 삭제해야합니다.

나는 다른 try catch에서 LogException 전화를 감쌌다. 이것이 올바른 방법인가요?

답변

2

은 충분하다. catch 블록에 예외가 발생하는 경우에도 finally 블록이 실행됩니다.

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

'catch 블록에 예외가 발생해도 finally 블록이 실행됩니다.'- 나는 이것을 깨닫지 못했습니다. 완벽 해, 고마워. 이 somwehere 다른 – davenewza

+0

@Alireza는'그것은 unhandled' 남아 –

+0

당신이 제안하고 PO의 자신의 코드가 어떤 잡을 예외를 캐치하는 것이 무엇인지의 차이 잡힐 때까지하지 않는 한 – Alireza

1

마지막으로 항상 (이 응용 프로그램을 종료하지 않는 한) 처리되지 않은 오류가 발생하더라도, 실행 차단합니다. 그래. 코드에 따라