async vs launch
- async
- 결과를 반환하는 코루틴을 시작하는데 사용
- 예외(Exception)가 발생할 경우 결과를 반환에 포함한다.
- 결과 또는 예외를 포함하는 Deferred<T>를 반환
- launch
- 결과를 반환하지 않는 코루틴을 시작하는데 사용
- 본인 혹은 자신 코루틴의 실행을 취소하기위해 사용할 수 있는 Job을 반환
- Job: Fire and forget
Job
Job은 생성될때 기본적으로 자동 시작된다.
하지만, 이를 자동시작 되지 않게하려면 CoroutineStart.LAZY를 사용할 수 있다.
Job join() vs start()
- join: Job을 완료할때까지 대기한다.
- start: 애플리케이션이 Job이 완료될때까지 기다리지 않는다.
Job의 라이프 사이클
- New: 생성됨
- Active: 실행중인 Job / 일시중단된 Job
- Completed: Job이 더 이상 실행되지 않음
- Canceling: Active상태에서 cancel() 호출 후 취소될때까지 사이
- Cancelled: 취소된 Job. Completed 상태이기도 하다.
- Job의 상태는 한 방향으로만 이동한다. 이미 완료된 Job을 다시 시작한다고 해서 시작되지 않는다.
Deferred
- 결과를 갖는 비동기 작업을 수행하기 위한 Job의 확장
- 다른 언어의 Future, Promise와 비슷하다.
Deferred join() vs await()
- join: 예외가 발생할 경우, Deferred.getCompletionExceptionOrNull()으로 Exception을 가져올 수 있다. 실행은 예외를 전파하지 않고 마무리 된다.
- await: 예외가 전파되고(throws exception), 실행은 실패한다.
*출처: 코틀린 동시성 프로그래밍
'프로그래밍 > Kotlin' 카테고리의 다른 글
Kotlin은 왜 나왔고, 왜 Android 공식언어로 채택되었을까? (0) | 2023.03.19 |
---|---|
[Kotlin] CompletableDeferred의 개념과 활용 (0) | 2022.11.12 |
Kotlin Scope functions의 쓰임새 (let, run, with, apply, also, takeIf, takeUnless) with skydove's pokedex (0) | 2022.07.11 |
[Kotlin/Java] Youtube URL인지 체크, Youtube Video ID 가져오기 (0) | 2021.01.08 |
[Kotlin/Java] 닉네임 정규식, 닉네임 유효성 검사하기 (3) | 2021.01.07 |