我最近学到了复合期货。我知道我可以有一个期货列表,当它们全部完成后,compositeFuture处理程序将被调用:
CompositeFuture.all(futures).onComplete(compositeAsync -> {
if (compositeAsync.succeeded()){
Future<CompositeFuture> cf = compositeAsync.result();
} else {
// at least 1 future failed
}
});
我的问题是关于这一行:Future<CompositeFuture> cf = compositeAsync.result();
我传递给compositeFuture的未来是List<Future<Buffer>>
类型,但是结果()返回了未来。如何将Future<Buffer>
从Future<CompoiteFuture>
中取出
我使用下面的示例将参数化期货传递到compositeFuture.all(futures);
interface MyCompositeFuture extends CompositeFuture {
// This is what the regular does, just for example
/*
static CompositeFuture all(List<Future> futures) {
return CompositeFutureImpl.all(futures.toArray(new Future[futures.size()]));
}
*/
static <T> CompositeFuture all(List<Future<T>> futures) {
return CompositeFutureImpl.all(futures.toArray(new Future[futures.size()]));
}
}
发布于 2021-12-30 08:17:05
你应该得到结果,而不是未来:
CompositeFuture.all(futures).onComplete(compositeAsync -> {
if (compositeAsync.succeeded()){
CompositeFuture cf = compositeAsync.result();
cf.list().forEach(futureResult -> {
// do something with the result of each future
});
} else {
// at least 1 future failed
}
});
请注意,CompositeFuture extends Future<CompositeFuture>
,这就是代码工作的原因。但是在onComplete
内部,您应该直接使用它,而不是作为Future<CompositeFuture>
使用
https://stackoverflow.com/questions/70520836
复制相似问题