Загрузка GuacheCache с сопрограммами Kotlin - PullRequest
0 голосов
/ 30 ноября 2018

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

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

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

1 Ответ

0 голосов
/ 30 ноября 2018

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

Примерно так

LoadingCache<Key, Deferred<Value>> = CacheBuilder.newBuilder()
    // ...
    .build(CacheLoader<Key, Deferred<Value>> { key ->
        someScope.async { computeMyValueSuspend(key) }
    })
...