W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
普通預(yù)處理器都是可并行處理的,然而有時(shí)我們希望某個(gè)預(yù)處理器同時(shí)只處理一個(gè)任務(wù)。比如 當(dāng)Token
過期時(shí)我們需要去刷新獲取新Token
,而刷新Token
這個(gè)操作只能有一個(gè)任務(wù)去執(zhí)行,因?yàn)槿绻?code>n個(gè)任務(wù)同時(shí)執(zhí)行的話,那么必有n-1
個(gè)任務(wù)剛刷新得到的Token
可能就立馬失效了,而這是我們所不希望的。
為了解決這個(gè)問題,OkHttps 提供了串行預(yù)處理器,它可以讓 HTTP 任務(wù)排好隊(duì),一個(gè)一個(gè)地進(jìn)入預(yù)處理器:
HTTP http = HTTP.builder()
.addSerialPreprocessor((PreChain chain) -> {
HttpTask<?> task = chain.getTask();
if (!task.isTagged("Auth")) {
chain.proceed();
return;
}
// 檢查過期,若需要?jiǎng)t刷新Token
requestTokenAndRefreshIfExpired((String token) -> {
task.addHeader("Token", token);
chain.proceed(); // 調(diào)用此方法前,不會有其它任務(wù)進(jìn)入該處理器
});
})
.build();
串行預(yù)處理器實(shí)現(xiàn)了讓HTTP任務(wù)排隊(duì)串行處理的功能,但值得一提的是:它并沒有因此而阻塞任何線程!
如果覺得 OkHttps 好用,就去點(diǎn)個(gè) Star 吧,項(xiàng)目地址:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: