我試圖了解 Dart 中異步函式的正確執行順序。這是一個讓我困惑的代碼:
void main() async {
print(1);
f1();
print(3);
}
void f1() async {
print(2);
}
根據規范首先main()將執行然后f1()。所以我期望輸出:
1
3
2
然而真正的輸出是:
1
2
3
這是否意味著f1()同步執行?
但是,如果我在輸出之前添加await Future.delayed(Duration.zero);到我所期望的:f1()print
void main() async {
print(1);
f1();
print(3);
}
void f1() async {
await Future.delayed(Duration.zero);
print(2);
}
1
3
2
誰能解釋一下?
uj5u.com熱心網友回復:
參考先前的答案,檔案中有兩處參考解釋了這一點:
異步函式:異步函式至少執行一個異步操作,也可以執行同步操作。
異步函式同步運行,直到第一個 await 關鍵字。
uj5u.com熱心網友回復:
僅添加單詞async不會使函式異步。如果您標記一個完全同步的函式async,它將像任何其他同步函式/代碼一樣執行。當您添加 時Future.delayed,它使函式實際上是異步的,這會將您print(2)放入事件佇列中,以便它在print(3).
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520966.html
標籤:镖飞镖异步
上一篇:如何在顫動中以一定角度切割線?
