2010-07-19 12 views

답변

0

별도의 catch 블록에서 catch하는 것이 안전합니다. 대안으로 모든 예외를 잡아서 예외가 있는지 확인할 수 있습니다. e is ThreadAbortException

나는 단지 코멘트 때문에이 게시물을 남깁니다. 분명히, 나는 그 예외에 대해 많이 알지 못했다.

+1

ThreadAbortExceptions는 try/catch 블록과 상호 작용하는 방식에 몇 가지 고유 한 동작을합니다. 일부 상황에서는 catch 블록에서 자동으로 다시 throw되기 때문에 완전히 catch하지 못할 수도 있습니다. 예외는 다른 유형과 같습니다. 나는이 행동의 뉘앙스를 완전히 이해하지 못한다는 것을 인정한다. 이 스레드는 더 많은 통찰력을 줄 수 있습니다. http://stackoverflow.com/questions/2830389/whats-the-deal-with-the-hidden-throw-when-catching-a-threadabortexception – mikemanne

+0

"예외를 삼키십시오", 또는 적어도 달성하고자하는 로그 항목을 쓰는 다음 "catch (Exception)"블록에서 다시 catch되지 않습니다. 그 작업을 안전하게 수행 할 수 있는지 궁금해하고 다른 작업을 중단하지 않습니다 (모든 작업이 정상적으로 작동하는 것으로 보이지만 미친 ASP.NET 수명주기를 사용하면 결코 알 수 없습니다 ...) – Farinha

1

ThreadAbortException 호출 스택을 더 멀리 전파하는 것을 중지해야하는 경우 Thread.ResetAbort으로 전화 할 수 있습니다. 따라서 다음과 같이 시도하십시오 :

try 
{ 
    // some code 
} 
catch (ThreadAbortException ex) 
{ 
    // do some logging 
    Thread.ResetAbort(); 
} 

올바른 사용법은 사용 시나리오에 따라 다릅니다. 나는 그것이 왜 올랐는지 정확히 이해하지 않는 한, 일반적으로 이것을 잡는 것에 대해 신중할 것입니다. 에스 세스에서는 "지금 당장 멈추고,하고있는 일을 그만둬" 신호입니다. 재설정하고 추가 처리를 수행하는 것은주의해서 수행해야합니다.

관련 문제