我将问题缩小到以下代码。我是Dart的新手,我似乎无法弄清楚为什么代码在打印数字1-10之前不会继续打印“完成”。
import 'dart:async';
Future<bool> wait() async {
for(int i = 0; i < 10; i++){
print('$i');
}
return true;
}
Future testAsync() async {
print('starting');
wait();
print('done');
}
main(List<String> arguments){
testAsync();
}
由于wait();
前面没有await关键字,程序不应该执行print('done');
然后输出数字吗?由于某种原因,它正等待wait();
完成。
答案 0 :(得分:0)
从Dart 2.0.0开始,这是预期的行为:
(中断)标记为异步的函数现在可以同步运行,直到第一个await语句为止。以前,它们会在运行任何代码(issue 30345)之前在函数主体顶部返回一次事件循环。
https://github.com/dart-lang/sdk/blob/stable/CHANGELOG.md
由于您的async
方法实际上没有等待任何内容,因此整个方法将同步执行。
您可以将代码更改为类似的形式,以获得所需的行为:
import 'dart:async';
Future<bool> wait() async {
await Future.microtask(() {
for (int i = 0; i < 10; i++) {
print('$i');
}
});
return true;
}
Future testAsync() async {
print('starting');
wait();
print('done');
}
main(List<String> arguments) {
testAsync();
}