В каком порядке данные выходят в результате merge двух потоков

«В каком порядке данные выходят в результате merge двух потоков» — вопрос из категории Реактивное программирование, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При слиянии (merge) двух потоков (Flow) в Kotlin, элементы выдаются в том порядке, в котором они приходят из исходных потоков. Если оба потока испускают элементы одновременно, порядок не гарантируется — он зависит от времени эмиссии каждого элемента.

Пример:

val flow1 = flowOf(1, 2, 3).onEach { delay(100) }  
val flow2 = flowOf("A", "B", "C").onEach { delay(150) }  

flow1.merge(flow2).collect { println(it) }  

Вывод может быть: 1, A, 2, B, 3, C (если задержки совпадают), но при других условиях порядок может измениться.