import 'dart:async';
void main() async {
Future.microtask(() => print(1));
Future.value(2).then(print);
Future.sync(() => print(3));
Future.sync(() => 4).then(print);
}
Run Code Online (Sandbox Code Playgroud)
我在 dartpad 中观察到的输出:
import 'dart:async';
void main() async {
Future.microtask(() => print(1));
Future.value(2).then(print);
Future.sync(() => print(3));
Future.sync(() => 4).then(print);
}
Run Code Online (Sandbox Code Playgroud)
为什么微任务没有首先执行?两个 Future.sync 函数以不同的顺序打印它们有什么不同。
该方法的一个重要方面.then()是您可以在文档中找到以下内容:
当这个 future 以 a 完成时
value,将使用该值调用 onValue 回调。如果这个 future 已经完成,回调不会立即被调用,而是被安排在稍后的微任务中。
https://api.dart.dev/stable/2.15.1/dart-async/Future/then.html
那么发生的事情是:
print(1)。Future.value(2)同步完成,以下操作.then将在微任务中完成。微任务队列现在是:print(1), print(2)。print(3). 这给出了输入中的第一行。.then(). 微任务队列现在是:print(1), print(2), print(4)。完成后,main()我们按微任务出现的顺序运行微任务,这解释了其余的输出。
Future一个重要的注意事项是,您永远不会等待从方法返回的任何内容,因此任何异步内容将在完成.then()后首先执行。main()
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |