Загрузка кэша гуавы с соплинами 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) }
})