반응형
runBlocking -> 코루틴을 생성하는 코루틴 빌더
runBlocking으로 감싸진 코드는 수행이 끝날 때까지 해당 쓰레드가 Blocking된다. (main쓰레드는 아니다!) 비동기로 동작하는 것이 아니라서 자주 쓰이진 않는다.
꼭 사용해야 하는 경우 라이브러리 또는 프레임워크에서 코루틴을 지원하지 않을 때
launch -> 쓰레드 차단 없이 새 코루틴을 생성하고 결과를 job이라는 객체로 반환, 비동기로 동작한다.
job은 lauch 내 상태를 확인하거나 시작 취소 시킬 수 있다
Ex. job.start(), job.cancel()을 통해 해당 비동기 로직을 제어할 수 있다.
lauch는 동작을 뒤로 미룰 수 있다.
launch(start=CoroutineStart.LAZY) {
}
-> 실행하는 시점에서 비동기 처리 한다 (즉 job.start() 할 때 실행된다)
async -> 비동기 처리에 대한 결과를 가져올 수 있다.
fun sum(a: Int, b: Int) = a+b
val result = async {
sum(1,3)
}
result.await()으로 결과값을 가져올 수 있다. 리턴 타입은 Deferred<T>로 반환된다.
코루틴은 키워드가 아닌 함수로써 비동기를 제어할 수 있다.
suspend -> 일시 중단 가능한 함수
suspend 함수에서 async, lauch를 사용하기 위해서는 coroutine 빌더를 만들어 줘야 한다.
coroutineScope {
}
runBlocking과 다른 것은 현재 쓰레드가 차단 되지 않고 Blocking이 되지 않고 동작한다.
flow -> 코루틴에서 리엑티브 프로그래밍 스타일로 작성할 수 있도록 만들어지 API
suspend 함수는 reactive mono처럼 단일값을 반환하지만 flow를 사용하게 되면 여러개의 반환값을 사용할 수 있게 해준다.
반응형
'개발 지식 > Kotlin' 카테고리의 다른 글
[Kotest] 클래스 프로퍼티 Value NULL 여부 한번에 검증하기 (2) | 2023.11.25 |
---|---|
[Mapstruct] Protobuf repeated와 Kotlin List 매핑이 되지 않는 문제 (0) | 2023.01.09 |
[Coroutine] Composing Suspending Functions (0) | 2022.09.02 |
[Coroutine] Coroutine Cancellation And Timeout (0) | 2022.08.29 |
[Coroutine] Coroutine Basic (0) | 2022.08.23 |
댓글