permet de dire que nous avons la situation suivante:Java: Comment exécuter des appels asynchrones consécutifs dans l'ordre avec Vertx?
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
String alphabet = "AB";
String[] splittedAlphabet = alphabet.split("");
for (int i = 1; i <= 5; i++) {
List<String> list = Arrays.asList(splittedAlphabet);
Iterator<String> iterator = list.iterator();
final int number = i;
//async call
vertx.setPeriodic(1000, id -> {
if (iterator.hasNext()) {
System.out.println(iterator.next() + " i: " + number);
} else {
vertx.cancelTimer(id);
}
});
}
}
Nous avons un for
extérieur -Boucle et une vertx.setPeriodic{}
-Boucle intérieure qui imprime de façon asynchrone le numéro d'index i
. L'extérieur for
-loop déclenche pour chaque numéro d'index cinq appels asynchrones de l'intérieur Vertx
-Loop. Cette boucle interne parcourt tous les personnages (dans notre cas, 'A' et 'B'). Cela signifie que chaque numéro d'index est combiné avec chaque caractère, qui sont appelés de manière asynchrone. C'est pourquoi il n'y a aucune garantie pour l'ordre dans la sortie. Thats ce que je suis:
A i: 1
A i: 2
A i: 5
A i: 4
A i: 3
B i: 4
B i: 5
B i: 1
B i: 3
B i: 2
Mais ce que je veux est (et de garder la boucle asynchrone intérieure):
A i: 1
A i: 2
A i: 3
A i: 4
A i: 5
B i: 1
B i: 2
B i: 3
B i: 4
B i: 5
Est-ce possible?
'async Consécutive' est une contradiction dans les termes, et est donc «async pour. – EJP