На основе официальной страницы Dart При использовании Async / Wait :
Когда приложение видит слово async
, оно обычно выполняет функцию синхронно, пока не увидит await
или return
Обратите внимание, что асинхронная функция начинает выполняться сразу
(синхронно). Функция приостанавливает выполнение и возвращает
незавершенного будущего, когда оно достигнет первого появления любого из
следующее:
- Первое выражение ожидания функции (после того, как функция получает
незавершенное будущее от этого выражения).
- Любой оператор возврата в функции.
- Конец тела функции.
и когда он видит любую из них, он возвращает незавершенную Future
и останавливает выполнение функции async
, пока не выполнит все другие функции, и когда все остальные функции будут выполнены, приложение вернется к async
функция и выполняет то, что внутри нее.
Вот фотография с официальной страницы Dart, объясняющая это более подробно:
Но когда я тестировал, я пытался добавить оператор print
перед возвратом будущего результата, как вы можете видеть в приведенном ниже коде, но результат был не таким, как указано на сайте, как говорится что приложение перестает выполняться, когда видит слово await
, но выражение: «Async - Hi Called 1st» было напечатано, как вы можете видеть до того, как другие функции были выполнены.
import 'dart:async';
Future<void> print1stAsync() async {
var test = await callAsync();
print(test);
}
main() {
print1stAsync();
print2nd();
print3rd();
print4th();
}
print2nd() {
print('Called 2nd');
}
print3rd() {
print("Called 3rd");
}
print4th() {
print('Called 4th');
}
Future<String> callAsync() {
print("Async - Hi Called 1st");
return Future(() => "Async - Called 1st ");
}
Выход:
Async - Hi Called 1st
Called 2nd
Called 3rd
Called 4th
Async - Called 1st
Так почему это происходит? я что-то упустил понял?