➡️ Простий API
Для кожного окремого випадку RxJava може використовувати безліч типів потоків - Observable, Flowable, Maybe, Single, Completable. У Kotlin весь цей функціонал дублюється лише двома типами: suspend fun та Flow, при цьому асинхронні вирази в ньому можуть викликатися за допомогою простих лямбда-виразів, що значно спрощує розробку. Тобто, у програмістів практично втрачається необхідність створювати однаковий код для кожного типу п'ять разів, за кількістю видів потоків.
➡️ Kotlin Multiplatform
Як відомо з назви, RxJava підтримує лише мову Java, тоді як Coroutines здатні працювати на будь-якій платформі, яка підтримує Kotlin. Отже, якщо виникне необхідність, наприклад, перевикористовувати асинхронний код між Android та iOS, то за допомогою корутину це можна зробити без проблем.
➡️ Структурована багатопоточність
На відміну від схильних до витоків потоків Rx Coroutines обробляють вхідні об'єкти навіть якщо сам програміст про них забув. Структурованість корутинів Kotlin значно полегшує управління життєвим циклом відкритих потоків.
➡️ Прості оператори
Створення кастомних операторів Rx може стати справжнім випробуванням для розробника, оскільки вимагає глибокого розуміння того, як фреймворк працює «під капотом». У Flow вони пишуться як решта коду, завдяки чому замість сотні рядків коду, часто, можна обійтися всього кількома рядками.
➡️ Продуктивність
Судячи з результатів тестування за допомогою Reactive Scrabble - стандарту для перевірки ефективності потоків, продуктивність Flow корутин значно перевершує RxJava.
➡️ Просте управління back-pressure
Коли дані видаються швидше, ніж потік, що приймає, встигає їх обробляти виникає back-pressure - надлишок вхідних подій. Для Rx це велика проблема і причина появи надлишкового і заплутаного коду у фреймворку, оскільки для запобігання надлишку випромінюючі потоки повинні постійно взаємодіяти з тими, хто приймає.
Flow корутин справляється з цим значно простіше. Якщо в якийсь момент вхідних даних стає занадто багато, він просто відкладає на час потоки, що випускають події. В результаті програмісту не потрібно так часто займатися back-pressure, що заощаджує дорогоцінний час.
➡️ Взаємозамінність
Корутини і Rx мають хорошу взаємозамінність. Завдяки перетворювачам, що поставляються Kotlin, програмісти можуть переводити проект з Rx до Flow поетапно і навіть продовжити використання Rx-бібліотек у своєму проекті, при цьому код не доведеться переписувати вручну. Крім того, Coroutines є інструменти, що дозволяють автоматично переводити застарілі потоки Rx на Flow.