Задачи на корутины в Kotlin. Часть 10
Реализуйте загрузку данных: async на IO, обработка на Default, результат через flow.
Сделайте простой кэш на ConcurrentHashMap + Mutex в suspend-функции.
Создайте rate limiter: не более 5 запросов в секунду через корутины.
Реализуйте retry с задержкой через repeat и delay при ошибке.
Сделайте pipeline обработки строк: read → trim → uppercase через flow.
Используйте select для ожидания данных из двух каналов.
Создайте ticker-корутину, которая каждую секунду отправляет событие в SharedFlow.
Реализуйте параллельный парсинг списка URL с ограничением через Semaphore(3).
Сделайте функцию suspend, объединяющую результаты нескольких async в одну строку.
Создайте комплексную задачу: channel → flow → stateFlow для отображения прогресса загрузки.