[kotlin] Flows are sequential

문돌이 개발자·2025년 1월 3일

Flows are sequential

각각의 flow에 대한 collect는 여러 flow를 사용하는 특별한 연산자를 사용하는 것이 아니면 순차적으로 일어난다. 기본적으로 collect는 새로운 coroutine을 생성하지 않고 기존 terminal operator를 호출한 corotuine 안에서 이뤄진다.

fun main() = runBlocking {
    (1..5).asFlow()
        .map {
            println("Map $it")
            if (it % 2 == 0) delay(1000)
            "string $it"
        }.collect {
            println("Collect $it")
        }
}

좀 더 이해하기 쉽게 예제코드를 바꿔봤다. 짝수일때만 delay를 1초씩 걸어봤다.

  • 결과
Map 1
Collect string 1
Map 2
Collect string 2
Map 3
Collect string 3
Map 4
Collect string 4
Map 5
Collect string 5

순차적으로 처리해서 출력되는 걸 알 수 있었다.

'여러 flow를 사용하는 특별한 연산자'가 궁금해졌는데 곧 나오길래 조금 더 있다가 다뤄보겠다.

profile
까먹고 다시 보려고 남기는 기록

0개의 댓글