Changsoon's Note Backend Developer

코루틴 취소

코루틴은 취소에 협력해야 한다.

이 말은 취소 가능한 코루틴이 스스로 취소가 요청됐는지 검사해서 적절히 반응해줘야 한다는 말이다.

코루틴 Job의 cancel() 메서드를 호출하면 Job을 취소할 수 있다.

이 코드를 실행해보면 코루틴이 취소에 협력하지 않기 때문에 계속 실행되는 모습을 볼 수 있다.

이런 문제를 해결하는 방법으로 다음 작업을 시작하기 전에 코루틴이 취소됐는지 확인하는 방법이 있다.

isActive 확장 프로퍼티는 현재 잡이 활성화된 상태인지 검사한다.

부모 코루틴이 cancel() 메서드를 호출하면 squarePrinter의 상태가 취소 중으로 바뀌고 그다음 isActive 검사를 통해 루프를 종료시킬 수 있다.

다른 방법으로는 delay(), join(), yield() 등의 일시 중단함수를 이용해 CancellationException을 발생시키는 방법이 있다.

코루틴 취소에 대한 다른 사항으로, 부모 코루틴이 취소되면 자동으로 모든 자식의 실행을 취소한다.

이 과정은 부모에게 속한 모든 Job 계층이 취소될 때까지 계속된다.

아래 코드는 세 가지 자식 Job 중 어느 하나도 완료 상태가 되지 못한다.