private Mono<String> get(String id){
return Mono.just(id).flatMap(s -> {
try {
log.info("sleep thread");
Thread.sleep(100000);
} catch (Exception e) {
log.info("error is {}",e);
}
return Mono.just("u");
});
}
public static void main(String[] args) {
testMain t = new testMain();
Mono<String> observable = t.get("id").timeout(Duration.ofMillis(10));
log.info("convert");
CompletableFuture<String> result = observable.toFuture().handleAsync((x, th) -> {
if (th != null) {
log.error("cache have error is {}", th);
return null;
}
return x;
});
}如上面的代碼示例,在get方法里封裝同步方法給mono,期望在10ms后,CompletableFuture能立即處理超時例外,但是事實上CompletableFuture的部分要等到執行緒阻塞100s后,才能進入,這是為什么
uj5u.com熱心網友回復:
你設定了執行緒睡眠100s嘛,在呼叫t.get("id")方法的時候執行緒一直在這等起的,都沒有回傳的Mono物件去呼叫timeout(Duration.ofMillis(10))函式,誰去判斷超時uj5u.com熱心網友回復:
t.get("id") 不是提交給異步的Mono了么,想讓他繼續執行下面的流程,而不是等待
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/236286.html
標籤:Web 開發
上一篇:mybatis中的#和$的區別,避免了SQL注入的問題
下一篇:mybatis中的#和$的區別:
