我必须在 lambda 函数中执行一些阻塞代码,该函数被传递给并发 hashmap 的 map.computeIfAbsent() 方法。 但是这会引发错误 - block()/blockFirst()/blockLast() 正在阻塞,这在主线程中不受支持。
public Mono<String> getAccessToken(String applicationName) {
Function<String, M2MApplicationTokenCache> mappingFunction = appName -> {
M2MAccessToken accessToken = accessTokenWebClient.getAccessToken(applicationName).block();
if (accessToken == null) {
throw new AuthorizationTokenException(TOKEN_FETCH_FAILED_ERROR, appName);
}
return prepareCache(applicationName, accessToken); // return M2MApplicationTokenCache object
};
m2MApplicationTokenCaches.getCacheMap().computeIfAbsent(applicationName, mappingFunction);
return m2MApplicationTokenCacheField
.get(M2MApplicationTokenAggregatedKey.builder().applicationName(applicationName).build(), false)
.map(M2MApplicationTokenAggregatedValue::getTokenValue)
.doOnNext(out -> log.trace("Token Value : {}", out));
}
我想在不同的线程上运行computeIfAbsent()方法并从我的缓存中返回一个令牌。 我已经探索过 mono.fromCallable() 但无法将代码放入其中。