为了账号安全,请及时绑定邮箱和手机立即绑定

等待异步回调函数在 java 中返回

等待异步回调函数在 java 中返回

慕容3067478 2022-08-03 16:36:40
final Function<Boolean, ? extends Class<Void>> functionCallback = (Boolean t) -> {   if(t) {     plugin.setIsInstalled(Boolean.TRUE);                }   return Void.TYPE;};foo.install(plugin,functionCallback);if(plugin.getIsInstalled().getValue())  return "done";else   return "not done";我想在回调完成执行后进行检查。在回调完成执行之前,如何防止执行此 if 条件?if(plugin.getIsInstalled().getValue())
查看完整描述

3 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

您可以使用在回调函数中调用的 :FutureTask


final FutureTask<Object> ft = new FutureTask<Object>(() -> {}, new Object());

final Function<Boolean, ? extends Class<Void>> functionCallback = (Boolean t) -> {

    if(t) {

        plugin.setIsInstalled(Boolean.TRUE);

        ft.run();

    }

    return Void.TYPE;

};


foo.install(plugin,functionCallback); 

ft.get();

if(plugin.getIsInstalled().getValue())

    return "done";

else 

    return "not done";

Future.get等到调用该方法,您还可以使用接受超时的 -method,以便在耗时过长时可以对此做出反应。runget


查看完整回答
反对 回复 2022-08-03
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

  1. 可以使用在函数运行时释放的 或 。CountDownLatchReentrantLock

  2. 您可以返回 a,您可以按如下方式使用结果foo#installCompletableFuture

CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 1);
future.thenAccept((v) -> System.out.println("v = " + v));
  1. 函数本身有一个方法,您可以使用该方法在 post 运行所需的任何内容。andThenapply


查看完整回答
反对 回复 2022-08-03
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

回调主要用于在特定任务完成后执行任务。因此,它最好将要执行的代码分离到调用该函数的不同函数中。

如果你想在回调之后执行一些东西,就要嵌套回调。


查看完整回答
反对 回复 2022-08-03
  • 3 回答
  • 0 关注
  • 233 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信