피드로 돌아가기
Dev.toFrontend
원문 읽기
CancellationTokenSource 오남용 방지를 위한 전담 래퍼 클래스 설계
Creating a Small Helper Class to Safely Handle CancellationTokenSource Cancel and Dispose
AI 요약
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 클래스 도입 검토