等待异步回调函数到 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
方法,这样您可以在超时时间过长时做出反应。
- 您可以使用
CountDownLatch
或 ReentrantLock
在函数为 运行 时释放。
- 您的
foo#install
可以 return 一个 CompletableFuture
并且您可以按如下方式使用结果
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 1);
future.thenAccept((v) -> System.out.println("v = " + v));
- 函数本身有一个
andThen
方法,您可以使用它来 运行 需要的任何东西 post apply
。
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
方法,这样您可以在超时时间过长时做出反应。
- 您可以使用
CountDownLatch
或ReentrantLock
在函数为 运行 时释放。 - 您的
foo#install
可以 return 一个CompletableFuture
并且您可以按如下方式使用结果
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 1);
future.thenAccept((v) -> System.out.println("v = " + v));
- 函数本身有一个
andThen
方法,您可以使用它来 运行 需要的任何东西 postapply
。