📌 실무에서 마주친 기술

Redis 기반의 분산 락을 사용하면서, 코루틴이 중간에 취소될 경우 finally 블록에서 suspend 함수가 정상적으로 작동하지 않을 수 있다.

예시:


🧠 관련된 CS 개념


📘 개념 요약 및 정의

Kotlin의 코루틴은 Job을 기반으로 취소(cancellation)를 지원하며, 취소 상태에서는 delay(), withContext, await()와 같은 취소 감지 가능한 suspend 함수들이 예외(CancellationException)를 던지고 실행되지 않는다.

따라서 finally 블록 내부에서 이런 함수들을 호출하면 코루틴이 취소된 상태일 경우 해당 suspend 함수는 실행되지 않고 스킵될 수 있다.

이를 방지하기 위해 Kotlin은 withContext(NonCancellable) 블록을 제공하여, 코루틴이 취소된 상태에서도 suspend 함수를 실행할 수 있도록 한다.


✍️ 내가 이해한 방식으로 설명하기

사용한 이유:

작동 방식: