본문으로 건너뛰기

"dotnet" 태그로 연결된 2개 게시물개의 게시물이 있습니다.

모든 태그 보기

C#에서 Thread와 Parallel.ForEach 안전하게 중단하는 방법

· 약 9분
Jeongyong Park
쌍팔년생 개발자

safe-thread-cancellation-in-csharp

안녕하세요, 쌍팔년생 개발자입니다.

작년에 대용량 데이터 처리 시스템을 구축하면서 정말 당황스러운 일이 있었어요. 사용자가 "취소" 버튼을 눌렀는데 프로그램이 멈추지 않는 거예요... 😅

당시 저희는 무거운 파일 변환 작업을 멀티스레딩으로 처리하고 있었는데, Thread.Abort()로 중단 기능을 구현했었거든요. 그런데 .NET 5로 업그레이드하니까 갑자기 "Thread.Abort()가 지원되지 않습니다"라는 에러가...

팀원들과 함께 밤늦게 고민한 결과, 안전한 스레드 중단 방법을 완전히 새로 구현해야 했어요.

TL;DR: Thread.Abort() 대신 CancellationToken이나 플래그 패턴을 사용하여 Thread와 Parallel.ForEach를 안전하게 중단할 수 있습니다. 이 방법들은 리소스 누수와 데이터 손상을 방지하며 .NET의 표준 취소 패턴을 따릅니다.

C#에서 Thread와 Parallel.ForEach 안전하게 중단하는 방법

· 약 2분
Jeongyong Park
쌍팔년생 개발자

GUI 환경에서 버튼을 클릭하는 등의 이벤트로 시간이 오래 걸리는 작업을 구동하는 경우 스레드를 분리하여 개발하는 방법이 좋다는 방법은 C# 뿐만 아니라 안드로이드나 MFC 등 GUI를 어느 정도 개발한 사람이라면 익숙하리라 생각한다.

그렇다면 그 시간이 오래 걸리는 작업을 더욱더 빠르게 하고 싶다면 병렬 처리가 가장 쉽고 빨리 적용할 수 있는 합리적인 방법이라고 생각한다.

TL;DR: Thread.Abort()는 위험하므로 사용하지 마세요.