等待异步回调函数到 return in java

Wait for the async callback function to return in java

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(plugin.getIsInstalled().getValue())。在回调完成执行之前,如何阻止执行此 if 条件?

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

如果你想在回调之后执行一些嵌套回调。

您可以使用在回调函数中调用的 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 等到调用 run 方法,您还可以使用接受超时的 get 方法,这样您可以在超时时间过长时做出反应。

  1. 您可以使用 CountDownLatchReentrantLock 在函数为 运行 时释放。
  2. 您的 foo#install 可以 return 一个 CompletableFuture 并且您可以按如下方式使用结果
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 1);
future.thenAccept((v) -> System.out.println("v = " + v));
  1. 函数本身有一个 andThen 方法,您可以使用它来 运行 需要的任何东西 post apply