Корутинные рецептыВозможно вы уже видели набор полезных
рецептов для Kotlin Coroutines от Marcin Moskala. Это набор утилитарных функций, которые помогают в повседневной разработке, позволяют значительно сократить код и сделать его лаконичнее.
🔹Функция
mapAsync позволяет элегантно сделать загрузку данных параллельной при работе с коллекциями
🔹Функции
retryWhen и
retryBackoff позволяют сделать повторные запросы в случае ошибки, а вторая функция позволяет сделать ожидание экспоненциальным, чтобы увеличить вероятность успешного повтора
🔹Функция
raceOf позволяет запустить несколько suspend функций параллельно и получить результат той, что завершится быстрее остальных. На моей практике, это единственная функция, которая использует механизм
select в корутинах.
🔹Функция
suspendLazy позволяет создать ленивое suspending свойство, которое не будет блочить поток, обращающийся к этому свойству
🔹Ну и различные
SharedDataSource и
StateDataSource, которые нужны, чтобы пошарить один экземпляр Flow для нескольких подписчиков по переданному ключу.
📎Помимо этих рецептов, также есть
либа с полезными операторами для Flow, взятыми из Rx.
💡 Еще к этому списку можно было бы докинуть
runCatchingCancellable, который не съедает CancellationException или функцию, противоположную
raceOf, которая выберет самый медленный источник, ведь иногда нам нужно, наоборот, подзамедлить UI, чтобы он не мелькал и пользователь понимал, что происходит на экране.
Если вы знаете еще полезные экстеншены для корутин, делитесь ими в комментариях
💬#Coroutines