Ответ
consumeAsFlow и receiveAsFlow — оба преобразуют ReceiveChannel в Flow, но работают по-разному:
-
consumeAsFlow- Потребляет канал (после завершения Flow канал закрыт).
- Подходит для однократного использования.
channel.consumeAsFlow().collect { ... } // После коллекции канал закрыт
-
receiveAsFlow- Не потребляет канал (можно использовать многократно).
- Канал остается открытым, но каждый коллектор получает одни и те же данные.
channel.receiveAsFlow().collect { ... } // Канал остается активным
Выбор зависит от сценария:
consumeAsFlow— если данные нужны один раз (например, разовая операция).receiveAsFlow— если канал должен жить дольше (например, shared-источник данных).