피드로 돌아가기
Creating a Small Helper Class to Safely Handle CancellationTokenSource Cancel and Dispose
Dev.toDev.to
Frontend

CancellationTokenSource 오남용 방지를 위한 전담 래퍼 클래스 설계

Creating a Small Helper Class to Safely Handle CancellationTokenSource Cancel and Dispose

GameDevToolLab2026년 6월 26일15intermediate

Context

Unity async 환경에서 CancellationTokenSource(CTS)의 Cancel()과 Dispose()의 역할 혼동으로 인한 리소스 누수 발생. 특히 필드에 저장된 CTS를 Dispose 후 null 처리하지 않아 발생하는 ObjectDisposedException과 LinkedTokenSource의 리소스 해제 누락이 주요 병목 지점으로 작용함.

Technical Solution

  • CTS의 소유권을 전담 Helper 클래스로 캡슐화하여 생성, 취소, 해제 로직을 단일 책임 원칙에 따라 통합
  • Dispose 이후 필드 참조를 제거하여 중복 호출 시 발생하는 ObjectDisposedException을 구조적으로 방지
  • CancelAfter 및 CreateLinkedTokenSource 사용 시 발생하는 내부 타이머 및 등록 리소스의 즉각적인 해제를 강제하는 라이프사이클 관리
  • 호출자에게는 CancellationToken만 제공하고 CTS 제어권은 래퍼 내부에 은닉하여 API 오용 가능성 차단
  • async void 핸들러 내 OperationCanceledException의 명시적 catch 구문을 통한 예외 전파 방지 설계

- CTS.Dispose() 호출 후 해당 참조 변수를 즉시 null로 설정했는지 확인 - CreateLinkedTokenSource로 생성한 CTS를 별도로 Dispose 하여 메모리 누수 방지 - async void 메서드 내에서 OperationCanceledException을 처리하는 try-catch 블록 구현 - CTS 생성-취소-해제 로직이 반복되는 경우 전담 Helper 클래스 도입 검토

원문 읽기