Guava LoadingCache 与 Kotlin 协程
Guava LoadingCache with Kotlin Coroutines
我正在使用基于协程(即非阻塞 HTTP 请求)的 Guava Loading Cache
to cache the results of HTTP requests. Kotlin / KTOR provides an HTTP Client Library。
我的问题是加载缓存不知道 suspend
ing 函数。我传递给加载缓存的 load
函数 不能 挂起。所以我被迫在 runBlocking
调用中执行 HTTP 请求,完全消除了非阻塞调用的好处。
我的问题是:有没有更好的方法?您将如何实现协同程序结果的缓存?
你可以把 Deferred
从协程中放入 guava 的缓存中 async { ... }
像这样
LoadingCache<Key, Deferred<Value>> = CacheBuilder.newBuilder()
// ...
.build(CacheLoader<Key, Deferred<Value>> { key ->
someScope.async { computeMyValueSuspend(key) }
})
我正在使用基于协程(即非阻塞 HTTP 请求)的 Guava Loading Cache
to cache the results of HTTP requests. Kotlin / KTOR provides an HTTP Client Library。
我的问题是加载缓存不知道 suspend
ing 函数。我传递给加载缓存的 load
函数 不能 挂起。所以我被迫在 runBlocking
调用中执行 HTTP 请求,完全消除了非阻塞调用的好处。
我的问题是:有没有更好的方法?您将如何实现协同程序结果的缓存?
你可以把 Deferred
从协程中放入 guava 的缓存中 async { ... }
像这样
LoadingCache<Key, Deferred<Value>> = CacheBuilder.newBuilder()
// ...
.build(CacheLoader<Key, Deferred<Value>> { key ->
someScope.async { computeMyValueSuspend(key) }
})