public CompletionStage<Void> process(Input) {
CompletableStage<Void> loop = CompletableFuture.completedFuture(null);
while(allDataProcessed) {
loop = loop.thenCompose( unusued -> queryDataAndProcess(...) );
}
return loop;
}
此解决方案的缺点是它可能会在内存中创建许多对象。为避免此问题,您可以使用IBM async utils:
public CompletionStage<Void> process(Input) {
return AsyncTrampoline.asyncWhile( () ->
queryDataAndProcess(...).thenApply( r -> allDataProcessed )
)
}
使用 Maven,您可以将其添加到您的项目中:
<dependency>
<groupId>com.ibm.async</groupId>
<artifactId>asyncutil</artifactId>
<version>0.1.0</version>
</dependency>
这个库实现了Trampoline 模式