![](/img/trans.png)
[英]Return CompletableFuture<Void> or CompletableFuture<?>?
[英]CompletableFuture with void methods
我正在寻找运行两个方法a()
和b()
,它们不接受任何参数并且异步返回任何内容(即void方法),以便它们以任何顺序同时返回。
但是,第三种方法c()
只应在其他任何一种方法完成后运行。
我相信我应该创建两个CompletableFuture对象(cf1用于a()
和cf2 b()
)然后使用CompletableFuture.anyOf(cf1, cf2).join()
来阻止c()
的代码。
但是,我不确定如何创建cf1和cf2 CompletableFuture对象。 我理解方法a()
和b()
基本上类似于Runnable的run
方法,但我不想改变它们的实现方式。 我应该调用哪个CompletableFuture的方法来为这两个方法创建这个CompletableFuture对象?
非常感谢您的帮助!
如果我正确地理解了你的问题,你可以做这样的事情,等到方法a()
或b()
任何a()
完成,然后一旦完成其中一个,你运行方法c()
。
CompletableFuture<Void> cf1 = CompletableFuture.runAsync(() -> a());
CompletableFuture<Void> cf2 = CompletableFuture.runAsync(() -> b());
CompletableFuture<Void> cf3 = CompletableFuture.anyOf(cf1, cf2).thenRunAsync(() -> c());
或者你可以直接使用runAfterEither
作为这个
CompletableFuture<Void> a = CompletableFuture.runAsync(() -> {
Util.delay(new Random().nextInt(1000));
System.out.println("Hello ");
});
a = a.runAfterEither(CompletableFuture.runAsync(() -> {
Util.delay(new Random().nextInt(1000));
System.out.println("Hi ");
}), () -> {
System.out.println("world"); // your c();
});
a.join();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.