launch

launch 는 현재 스레드를 블락 시키지 않고 새 코루틴을 시작하며, 이에 대한 참조를 Job 객체로 리턴한다.

CoroutineContext는 해당 CoroutineScope의 것을 상속하며, launch 함수의 매개변수로 Context를 지정할 수도 있다. 해당 Context에 Dispatcher나 다른 ContinuationInterceptor가 없으면 Dispatchers.Default가 지정된다. 기본적으로 코루틴은 즉시 실행되도록 스케줄링 된다 (CoroutineStart.DEFAULT)

Untitled

이 코루틴의 catch되지 않은 예외들은 기본적으로 해당 컨텍스트의 상위 작업(parent job)을 취소한다. CoroutineExceptionHandler가 명시적으로 설정되어있다면 ExceptionHandler에서 예외를 처리한다.


async

async는 코루틴을 생성하고 Deferred의 구현으로 해당 결과를 반환한다. 실행중인 코루틴은 deferred의 결과가 취소되면 취소된다. 구조화된 동시성 패러다임을 적용하기 위해, 코루틴 실패 시 부모 작업 혹은 외부 스코프를 취소한다.

CoroutineContext는 launch와 마찬가지로 CoroutineScope에서 상속되며, context 인자와 함께 추가적인 컨텍스트를 지정할 수 있다.

Untitled


runBlocking

runBlocking은 새로운 코루틴을 시작하고, 동작이 완료될 때 까지 현재 스레드를 블락시킨다. 이 함수는 코루틴에서 사용되지 않아야 한다. runBlocking 함수는 main 함수 또는 test 에서, blocking style 이면서, suspending style 로의 넘어가기 위한 bridge 의 역할로 사용되도록 디자인 되었다.

만약 다른 context가 지정되면, 지정된 context에서 코루틴이 수행되고 runBlocking을 호출한 스레드는 블락된다.

Untitled


Job

Job은 launch 함수로 시작된 코루틴 블록을 통해 반환된다. Job은 결과를 반환하지 않으며, 실행 후 삭제로 간주되는 작업이 이에 해당한다.

Job은 코루틴이 진행중이거나 CompletableJob이 완료되거나, 작업이 실패하거나 취소될 때 까지 active 상태이다.