Dart编程语言的异步功能无法正常工作

时间:2019-01-07 12:03:09

标签: asynchronous dart

我不知道为什么以下代码无法正常工作。 我也在DartPad上尝试过。结果是一样的。

import 'dart:async';

Future<bool> longWait(String prefix) async {
  for (int i = 0; i < 5; i++) {
    print('$prefix $i');
  }
  return true;
}

Future testAsync() async {
  print('starting');
  longWait('Async');
  print('done');
}

main(List<String> arguments) {
  testAsync();
}
the result is:
starting
Async 0
Async 1
Async 2
Async 3
Async 4
done

but it has to be this:
starting
done
Async 0
Async 1
Async 2
Async 3
Async 4

1 个答案:

答案 0 :(得分:1)

由于异步功能开始处的Dart 2同步代码已同步执行。
这与Dart 1不同。

一种解决方法是

Future<bool> longWait(String prefix) async {
  await Future.microtask((){});

  for (int i = 0; i < 5; i++) {
    print('$prefix $i');
  }
  return true;
}

await之后的代码被异步执行,并导致所需的行为。 (已在DartPad中测试)