import 'dart:async';
void main() async {
Future.microtask(() => print(1));
Future.value(2).then(print);
Future.sync(() => print(3));
Future.sync(() => 4).then(print);
}
我在 dartpad 中觀察到的輸出:
3
1
2
4
為什么不先執行微任務?以及以不同順序列印它們的兩個 Future.sync 函式有什么不同。
uj5u.com熱心網友回復:
該方法的一個重要方面.then()是您可以在檔案中找到以下內容:
當這個未來以 a 結束時
value,將使用該值呼叫 onValue 回呼。如果這個未來已經完成,回呼將不會立即被呼叫,而是會安排在稍后的微任務中。
https://api.dart.dev/stable/2.15.1/dart-async/Future/then.html
那么會發生什么:
- 您安排一個微任務來呼叫
print(1). Future.value(2)同步完成,以下.then將在微任務中完成。微任務佇列現在是:print(1),print(2).- 第三行是 sync 并立即完整運行,因此我們運行
print(3). 這給出了輸入的第一行。 - 由于
.then(). 微任務佇列現在是:print(1),print(2),print(4).
完成后main(),我們按照它們進入的順序運行微任務,這解釋了您的其余輸出。
一個重要的注意事項是,您永遠不會等待方法回傳Future的任何內容,.then()因此任何異步內容將在完成后首先執行main()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/420865.html
標籤:
上一篇:顫振和飛鏢中的空安全
