0
可以說,我們有以下的情況:Java:如何按照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);
}
});
}
}
我們有一個外for
-loop和內部vertx.setPeriodic{}
-loop它打印異步索引號i
。外部for
-loop觸發每個索引號的五個異步調用內部的Vertx
-Loop。這個內部循環遍歷每個字符(在我們的例子中是'A'和'B')。這意味着每個索引號都與每個被異步調用的字符組合在一起。這就是爲什麼在輸出中沒有訂單保證。 那是我得到了什麼:
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
但我希望得到的是(並保持內循環異步):
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
這可能嗎?
「連續異步」是一個自相矛盾的,所以是「爲了異步」。 – EJP