第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

CompletableFuture 包裝器

CompletableFuture 包裝器

皈依舞 2021-07-22 18:03:47
我有異步方法asyncClass.getChild("test", listChild -> {  if (listChild.isOk()) {  List<String> list = listChild.isSuccess().getData()  }  return null;});我如何在 CompletableFuture 中包裝這個(gè)異步調(diào)用?final CompletableFuture<List<String>> future = new CompletableFuture<>();asyncClass.getChild("test", listChild -> {  if (listChild.isOk()) {    future.complete(listChild.isSuccess().getData());  }  return null;});return future;一切正常,但我希望一切都在單獨(dú)的線程調(diào)用中工作interface AsyncFS {    fun getChild(path: String, onResult: (Result<List<String>>) -> Unit)}
查看完整描述

3 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

似乎asyncClass.getChild是異步執(zhí)行的(因?yàn)樗枰卣{(diào))。如果是這種情況,那么您當(dāng)前的實(shí)現(xiàn)就足夠了(下面的更正除外)。


asyncClass.getChild("test", listChild -> {

  if (listChild.isOk()) {

    future.complete(listChild.isSuccess().getData());

  } else {

      future.complete(null); //you need to do this

      //or future.completeExceptionally(exception) if this is a failure

  }

});

如果您想getChild在單獨(dú)的線程中運(yùn)行,那么我強(qiáng)烈建議您重新設(shè)計(jì)該方法以使其返回List<String>而不是進(jìn)行回調(diào)。這種設(shè)計(jì)使得getChild異步運(yùn)行變得很尷尬。


interface AsyncFS {

    fun getChild(path: String): List<String> //don't trust my syntax

}

然后以這種方式異步運(yùn)行它:


CompletableFuture<List<String>> future = 

    CompletableFuture.supplyAsync(() -> asyncClass.getChild("test"));

return future;


查看完整回答
反對(duì) 回復(fù) 2021-07-29
?
胡說(shuō)叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

更改您的getChild()方法以返回 aCompletableFuture<ListChild>而不是將回調(diào)作為參數(shù)。


沒(méi)有實(shí)際的代碼,我無(wú)法確切地說(shuō)出這必須如何完成,但基本上代碼看起來(lái)像


CompletableFuture<ListChild> result = new CompletableFuture<>();

processAsynchronously(path, result);

return result;

whereprocessAsynchronously()執(zhí)行異步計(jì)算,并在某些時(shí)候調(diào)用result.complete(listChild).


然后調(diào)用者將能夠輕松地將調(diào)用鏈接起來(lái),例如


CompletableFuture<List<String>> result = asyncClass.getChild("test")

          .thenAcceptAsync(listChild -> {

              if (listChild.isOk()) {

                  return listChild.isSuccess().getData()

              }

              return null;

          }, executor);

或使用他想要的任何執(zhí)行程序進(jìn)行任何其他處理。


如您所見(jiàn),這比強(qiáng)制執(zhí)行特定類型的回調(diào)要靈活得多。


查看完整回答
反對(duì) 回復(fù) 2021-07-29
?
飲歌長(zhǎng)嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

提供 Runnable 或 Supplier 作為參數(shù)CompletableFuture.runAsync()或supplyAsync()


return CompletableFuture.runAsync(() -> {

    doSomething();

}, optionalExecutor);


查看完整回答
反對(duì) 回復(fù) 2021-07-29
  • 3 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)