launch
는 현재 스레드를 블락 시키지 않고 새 코루틴을 시작하며, 이에 대한 참조를 Job
객체로 리턴한다.
CoroutineContext는 해당 CoroutineScope의 것을 상속하며, launch 함수의 매개변수로 Context를 지정할 수도 있다. 해당 Context에 Dispatcher나 다른 ContinuationInterceptor가 없으면 Dispatchers.Default
가 지정된다. 기본적으로 코루틴은 즉시 실행되도록 스케줄링 된다 (CoroutineStart.DEFAULT)
이 코루틴의 catch되지 않은 예외들은 기본적으로 해당 컨텍스트의 상위 작업(parent job)을 취소한다. CoroutineExceptionHandler
가 명시적으로 설정되어있다면 ExceptionHandler에서 예외를 처리한다.
async
는 코루틴을 생성하고 Deferred
의 구현으로 해당 결과를 반환한다. 실행중인 코루틴은 deferred의 결과가 취소되면 취소된다. 구조화된 동시성 패러다임을 적용하기 위해, 코루틴 실패 시 부모 작업 혹은 외부 스코프를 취소한다.
CoroutineContext는 launch와 마찬가지로 CoroutineScope에서 상속되며, context 인자와 함께 추가적인 컨텍스트를 지정할 수 있다.
runBlocking
은 새로운 코루틴을 시작하고, 동작이 완료될 때 까지 현재 스레드를 블락시킨다. 이 함수는 코루틴에서 사용되지 않아야 한다. runBlocking 함수는 main 함수 또는 test 에서, blocking style 이면서, suspending style 로의 넘어가기 위한 bridge 의 역할로 사용되도록 디자인 되었다.
만약 다른 context가 지정되면, 지정된 context에서 코루틴이 수행되고 runBlocking을 호출한 스레드는 블락된다.
Job
은 launch 함수로 시작된 코루틴 블록을 통해 반환된다. Job은 결과를 반환하지 않으며, 실행 후 삭제로 간주되는 작업이 이에 해당한다.
Job은 코루틴이 진행중이거나 CompletableJob이 완료되거나, 작업이 실패하거나 취소될 때 까지 active 상태이다.