Используйте single-flight: один запрос на ключ URL и список подписчиков, ожидающих общий результат. Кеш последнего ответа — отдельная политика, особенно для меняющегося заряда батареи.
Объединить запросы с разных экранов и разослать результат подписчикам
Используйте single-flight: один запрос на ключ URL и список подписчиков, ожидающих общий результат. Кеш последнего ответа — отдельная политика, особенно для меняющегося заряда батареи.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создать реализацию интерфейса CommandExecutor, который принимает URL (строку) и возвращает результат через переданную лямбда‑функцию. Необходимо построить механизм, собирающий одинаковые запросы в один и доставляющий полученный ответ всем подписчикам. Такой подход следует использовать для получения уровня заряда батареи Bluetooth‑устройства, запрашиваемого с нескольких экранов.
Ответ
Используйте single-flight: один запрос на ключ URL и список подписчиков, ожидающих общий результат. Кеш последнего ответа — отдельная политика, особенно для меняющегося заряда батареи.
Регистрацию первого запроса и последующих слушателей выполняйте атомарно под Mutex либо на одном dispatcher. После ответа удаляйте in-flight запись и уведомляйте всех, не удерживая lock во время callback. Для каждого подписчика нужна отмена; отменять общий запрос можно, когда слушателей не осталось и транспорт это поддерживает. Добавьте timeout, обработку ошибок и ключ, включающий устройство: одинаковый путь для разных Bluetooth-устройств не должен объединяться.