Dart等待异步功能完成而无需等待

时间:2020-03-30 21:37:55

标签: asynchronous dart async-await

我将问题缩小到以下代码。我是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();完成。

1 个答案:

答案 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();
}