C#에서 Thread와 Parallel.ForEach 안전하게 중단하는 방법
· 약 9분
안녕하세요, 쌍팔년생 개발자입니다.
작년에 대용량 데이터 처리 시스템을 구축하면서 정말 당황스러운 일이 있었어요. 사용자가 "취소" 버튼을 눌렀는데 프로그램이 멈추지 않는 거예요... 😅
당시 저희는 무거운 파일 변환 작업을 멀티스레딩으로 처리하고 있었는데, Thread.Abort()로 중단 기능을 구현했었거든요. 그런데 .NET 5로 업그레이드하니까 갑자기 "Thread.Abort()가 지원되지 않습니다"라는 에러가...
팀원들과 함께 밤늦게 고민한 결과, 안전한 스레드 중단 방법을 완전히 새로 구현해야 했어요.
TL;DR: Thread.Abort() 대신 CancellationToken이나 플래그 패턴을 사용하여 Thread와 Parallel.ForEach를 안전하게 중단할 수 있습니다. 이 방법들은 리소스 누수와 데이터 손상을 방지하며 .NET의 표준 취소 패턴을 따릅니다.