Загрузка кэша гуавы с соплинами Kotlin

Я использую гуаву Loading Cache кэшировать результаты HTTP-запросов. Kotlin / KTOR предоставляет клиентскую библиотеку HTTP на основе сопрограмм (то есть неблокирующих HTTP-запросов).

Моя проблема в том, что загрузочный кеш понятия не имеет suspend Инг функции. load Функция, которую я передаю в загрузочный кеш, не может быть приостановлена. Поэтому я вынужден делать HTTP-запросы внутри runBlocking вызов, устраняя преимущество неблокирующих вызовов полностью.

Мой вопрос: есть ли лучший способ? Как бы вы реализовали кеширование результатов сопрограмм?

1 ответ

Решение

Вы можете положить Deferred в кеш гуавы от сопрограмм async { ... }

Что-то вроде этого

LoadingCache<Key, Deferred<Value>> = CacheBuilder.newBuilder()
    // ...
    .build(CacheLoader<Key, Deferred<Value>> { key ->
        someScope.async { computeMyValueSuspend(key) }
    })
Другие вопросы по тегам