Почему в следующей программе асинхронная функция вызывается перед синхронной? - PullRequest
0 голосов
/ 23 декабря 2018
showAsync() {
  print('Async Function Call!!');    
}

show() async {
  await showAsync();
  print('all done!!');
}

showSync() {
  print('Sync Function Call!');
}

main(List<String> args) {
  show();
  showSync();
}

Выход:

Async Function Call!!
Sync Function Call!
all done!!

1 Ответ

0 голосов
/ 23 декабря 2018

Функция showAsync не выполняет ничего, требующего ожидания, поэтому она просто выполняется.Если вы переключитесь на следующее, другие функции будут печататься первыми:

showAsync() {
  Future.delayed(Duration(seconds: 1), () {
    print('Async Function Call!!');
  });
}

Как отметил Гюнтер в комментариях: " В Dart 1.x асинхронные функции немедленно приостановили выполнение. В Dart 2вместо немедленной приостановки асинхронные функции выполняются синхронно до первого ожидания или возврата."(цитата из документов Dart).

Таким образом, если вы добавите вторую await showAsync(), она не будет выполненадо вызова синхронизации.

Подробное описание доступно здесь: https://www.dartlang.org/tutorials/language/futures

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...