각각의 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를 사용하는 특별한 연산자'가 궁금해졌는데 곧 나오길래 조금 더 있다가 다뤄보겠다.