Дарт ждет завершения функции asyn c без ожидания - PullRequest
0 голосов
/ 31 марта 2020

Я сузил свою проблему до приведенного ниже кода. Я новичок в 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();
}

Так как нет Ключевое слово await перед wait(); не должно ли программа выполнить print('done'); и затем распечатать числа? По какой-то причине, он все равно ждет wait(); до конца sh.

1 Ответ

0 голосов
/ 31 марта 2020

Это ожидаемое поведение начиная с Dart 2.0.0:

(прерывание) Функции, помеченные как asyn c, теперь работают синхронно до первого оператора ожидания. Ранее они возвращались к событию l oop один раз в верхней части тела функции перед выполнением любого кода ( выпуск 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();
}
...