3

我正在使用 GuavaLoading Cache来缓存 HTTP 请求的结果。Kotlin/KTOR 提供了一个基于协程(即非阻塞 HTTP 请求)的HTTP 客户端库。

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

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

4

1 回答 1

6

您可以Deferred从协程中放入番石榴的缓存async { ... }

像这样的东西

LoadingCache<Key, Deferred<Value>> = CacheBuilder.newBuilder()
    // ...
    .build(CacheLoader<Key, Deferred<Value>> { key ->
        someScope.async { computeMyValueSuspend(key) }
    })
于 2018-11-30T13:16:38.580 回答