우선 기존에 배웠던 코드들을 활용해 무한 루프를 돌고 있는 MainThread를 만들어 주고 bool 전역 변수를 통해 빠져나갈 구멍을 만들어준다.
그뒤 Task를 활용해 MainThread()를 실행시켜준다. 그후 Thread.Sleep(*1ms)으로 잠시 쉬어주고 _stop 변수를 True 변경해 탈출 시켜준다.
예상했던 대로 t.Start()를 통해 메인쓰레드를 먼저 동작 시키고, 2초 후 나머지 항목들이 진행되는 구조이다.
위와 똑같은 구조의 코드를 가지고 Debug 모드 -> Release로 변경했을 경우에는 문제가 발생한다.
Release 모드 사용 시 자체적으로 최적화를 진행해주게 되는데, 그 과정 중에서 while 영역을 변경하여 무한 루프에 빠지게 되어 그 다음 테스크로 넘어가지 못하는 현상이 발견된다.
이때는 volatile라는 키워드를 사용하면 최적화 하지 말아달라고 요청할 수 있다. 조금 더 정확하게는 최신의 값을 가져와라(?)라는 조금 더 복잡한 개념이 들어가기에 이걸 굳이 사용할 필요는 없다 한다.
하지만 여기서만 사용해보면 Release 상태로 가더라도 _stop을 최적화 하지 않아 다시 정상 구동 되는 걸 확인할 수 있다.
Debug 때는 잘 구동되어도, Release 되면 오류가 발생할 수 있다는 점을 알아두자