[c#] C# 스레드 관련 예외처리
C#에서 멀티스레딩을 사용하다 보면 예외 처리가 필요할 수 있습니다. 스레드에서 발생하는 예외를 적절히 처리하지 않으면 프로그램이 예기치 않게 종료될 수 있습니다. 따라서 스레드에서 발생하는 예외를 적절히 처리하는 방법에 대해 알아봅시다.
1. 스레드에서 발생하는 예외 잡기
1.1 try-catch
블록 사용하기
스레드에서 예외를 처리하려면 해당 스레드에서 예외가 발생할 수 있는 코드를 try-catch
블록 내부로 감싸야 합니다.
Thread myThread = new Thread(() =>
{
try
{
// 예외가 발생할 수 있는 코드
}
catch (Exception ex)
{
// 예외 처리 로직
}
});
1.2 AppDomain.CurrentDomain.UnhandledException
이벤트 활용
어떤 예외도 처리되지 않았을 때 애플리케이션 전체에서 해당 예외를 처리하려면 AppDomain.CurrentDomain.UnhandledException
이벤트를 활용할 수 있습니다.
AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
{
Exception ex = (Exception)args.ExceptionObject;
// 예외 처리 로직
};
2. 스레드에서 예외 다시 던지기
2.1 throw
키워드 사용하기
catch
블록 내에서 예외를 다시 던져서 상위 호출자에게 예외를 전파할 수 있습니다.
catch (Exception ex)
{
// 예외 처리 로직
throw; // 예외 다시 던지기
}
3. 스레드 중단시키기
스레드에서 예외가 발생했을 때 해당 스레드를 중단시키는 방법에 대해 다루어봅시다.
3.1 Thread.Abort
메서드 사용하지 말기
Thread.Abort
를 호출하여 스레드를 중단시키는 것은 권장되지 않습니다. 이 메서드는 예상치 못한 문제를 일으킬 수 있기 때문입니다.
3.2 CancellationToken
활용
CancellationToken
을 사용하여 스레드를 중단시킬 수 있습니다. CancellationToken
을 이용하면 스레드가 안전하게 중단될 수 있습니다.
결론
스레드에서 발생하는 예외를 적절히 처리하고, 스레드를 안전하게 중단시키는 방법을 알아보았습니다. 잘못된 예외 처리와 스레드 중단은 애플리케이션의 안정성과 신뢰성에 영향을 미칠 수 있으므로 주의 깊게 다뤄져야 합니다.
더 많은 정보는 Microsoft 공식 문서를 참고할 수 있습니다.
감사합니다.