0

我正在使用 Caffeine 和 Kotlin 构建缓存。我有这样的事情:

private val esCache: Cache<EsRequestParam, EsResponse> = Caffeine.newBuilder()
    .expireAfterWrite(30, TimeUnit.SECONDS)
    .refreshAfterWrite(50, TimeUnit.SECONDS)
    .build<EsRequestParam, EsResponse> {
        runBlocking {
            sendRequest(it)
        }
    }


private suspend fun sendRequest(requestParams: EsRequestParam): EsResponse? {
        val result = client
                .sendJsonObjectAwait(
                        JsonObject(
                            buildPostBody(requestParams)
                        ))
                .bodyAsJson(EsResponse::class.java)
        esCache.put(requestParams, result)
        return result
    }

因为我也在使用 Vertx,所以我知道它有一个事件循环,可以阻止并阻止我的应用程序。并runBlocking给我带来了这个问题。所以我需要将其交换runBlocking为其他一些 Vertx 资源,或者可能是GlobalScope.launch(vertx.dispacther()). 然后我可以避免阻塞事件。问题是:我不知道我可以使用哪个 Vertx 资源,也不能使用,GlobalScope.launch因为它返回的是 Job,而不是sendRequest函数的返回值。有任何想法吗?Ps.:既然sendRequest是暂停的乐趣,我只能从协程或其他暂停的乐趣中调用它:(

4

0 回答 0