J'ai vu un exemple dans chacun d'entre eux, mais j'ai besoin de savoir exactement quelle est la différence de profondeur. Parce que parfois je pense pouvoir utiliser les deux pour obtenir le même résultat un?
quel est l'avantage d'utiliser chacun d'eux?
Comme cet exemple les deux sont travaillés:
public CompletionStage<Result> getNextQueryUUID() {
return CompletableFuture.supplyAsync(() -> {
String nextId = dbRequestService.getNextRequestQueryUUID();
return ok(nextId);
}, executor);
}
public CompletableFuture<Result> getNextQueryUUID() {
return CompletableFuture.supplyAsync(() -> {
String nextId = dbRequestService.getNextRequestQueryUUID();
return ok(nextId);
}, executor);
}
Cet exemple s’exécute dans
Play framework
.
Une CompletableFuture
est une CompletionStage
. Cependant, comme son nom l'indique, il est
complete
ou completeExceptionally
.Future
: Vous pouvez utiliser la méthode get
, etc. pour obtenir le résultat.IMHO, dans la plupart des API, comme dans votre exemple, vous devriez utiliser CompletionStage
, car
complete
à l'appelant.get
fourni par Future
.L'un est une interface et l'autre est une classe. Habituellement, vous retournez l'interface et non l'implémentation, mais je doute que ce soit le cas ici. Retourner CompletableFuture
a plus de sens pour moi.
Sauf si vous utilisez bien sûr une autre implémentation de cette interface, comme la variable DelegatingCompletableFuture
de Spring, mais d'après vos exemples, vous ne l'êtes pas.