普通預(yù)處理器都是可并行處理的,然而有時我們希望某個預(yù)處理器同時只處理一個任務(wù)。比如 當(dāng)Token
過期時我們需要去刷新獲取新Token
,而刷新Token
這個操作只能有一個任務(wù)去執(zhí)行,因為如果n
個任務(wù)同時執(zhí)行的話,那么必有n-1
個任務(wù)剛刷新得到的Token
可能就立馬失效了,而這是我們所不希望的。
為了解決這個問題,OkHttps 提供了串行預(yù)處理器,它可以讓 HTTP 任務(wù)排好隊,一個一個地進入預(yù)處理器:
HTTP http = HTTP.builder()
.addSerialPreprocessor((PreChain chain) -> {
HttpTask<?> task = chain.getTask();
if (!task.isTagged("Auth")) {
chain.proceed();
return;
}
// 檢查過期,若需要則刷新Token
requestTokenAndRefreshIfExpired((String token) -> {
task.addHeader("Token", token);
chain.proceed(); // 調(diào)用此方法前,不會有其它任務(wù)進入該處理器
});
})
.build();
串行預(yù)處理器實現(xiàn)了讓HTTP任務(wù)排隊串行處理的功能,但值得一提的是:它并沒有因此而阻塞任何線程!
如果覺得 OkHttps 好用,就去點個 Star 吧,項目地址:
更多建議: