코루틴에서 아주 중요한 기능 중 하나는 바로 취소다.작업을 취소하기 위해 단순히 스레드를 죽이는 것은 최악의 방법이다. 연결을 닫고 자원을 해제할 방법이 없기 때문이다.개발자들이 상태가 Active한지 계속해서 확인하는 방법도 불편하다.코루틴의 취소 방식은 아주 간단하고 편리하며, 안전하다. 기본적인 취소Job 인터페이스는 잡을 취소하는 cancel() 함수를 가지고 있다. cancel() 함수를 호출하면 다음과 같은 효과가 일어난다.cancel()을 호출한 코루틴은 첫 번째 중단점에서 잡을 끝낸다.잡의 자식들도 취소된다. 하지만 잡의 부모는 영향을 받지 않는다.취소된 잡은 새로운 코루틴의 부모로 사용될 수 없다. 취소된 잡은 Cancelling 상태가 되었다가 Cancelled 상태가 된다. canc..
지난 포스팅에서 구조화된 동시성의 특성에 대해 배웠다.자식 코루틴은 부모 코루틴으로부터 컨텍스트를 상속받는다.부모 코루틴은 모든 자식 코루틴이 작업을 마칠 때까지 기다린다.부모 코루틴이 취소되면 자식 코루틴도 취소된다.자식 코루틴에서 에러가 발생하면, 부모 코루틴도 에러로 소멸된다.구조화된 동시성의 특성은 Job 컨텍스트와 관련이 있다.Job은 코루틴을 취소하고, 상태를 파악하는 등 다양하게 사용될 수 있다. Job이란 무엇인가?잡은 수명을 가지고 있고 취소 가능하다.Job은 인터페이스지만 구체적인 사용법과 상태를 가지고 있기 때문에 추상 클래스처럼 다룰 수도 있다. 잡의 수명은 상태로 나타낸다. 위 그림은 잡의 상태와 상태 변화를 나타낸 도식도이다.ActiveActive 상태에서는 잡이 실행되고 코루..