본문 바로가기

C#

[예외처리]Thread Exception Propagation 문제

Task가 아닌 Thread를 사용해야 했기 때문에 나온 문제.

Task는 예외 전달에 문제가 없지만 다른 스레드에서 주스레드로는 Exceptinon propagation이 일어나지 않음.

자세한 스터디는 further task 로..

 

Thread thread = new Thread(() => { method(); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();

코드와 같이 Thread에서 method 함수를 실행시켜 주었고, method의 예외처리 catch에서는 throw Exception을 해주었던 상황.

 

Thread를 생성해주었던 주스레드 함수에 저 Thread 생성, join 구문도 try괄호에 쌓여져 있었기 때문에 문제가 될것이 없었으나 method() 함수에 throw Exception; 에서 계속 에러 발생.

 

구글링 후 가장 쉬운 해결 방법 도출

1. 전역 Exception 객체 생성

2. method() catch에서 전역 Exception에 값 넣어줌

3. thread.Join() 구문 뒤에 Exception null 체크 해서, Exception이 발생했다는것 catch 후 로직 전개

 

※주의 Exception변수는 재처리시 null 일 수 있도록 method 함수 실행전 null로 만들어 줄것.

 

'C#' 카테고리의 다른 글

[error 처리] The JSON value could not be converted to...  (0) 2020.10.19