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

我的问题是加载缓存不知道 suspending 函数。我传递给加载缓存的 load 函数 不能 挂起。所以我被迫在 runBlocking 调用中执行 HTTP 请求,完全消除了非阻塞调用的好处。

我的问题是:有没有更好的方法?您将如何实现协同程序结果的缓存?

你可以把 Deferred 从协程中放入 guava 的缓存中 async { ... }

像这样

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