У меня проблема с async
методами и Future
в Dart.
Я думаю, что сделал / понял что-то не так, но я не знаю что.
Я пытаюсь выяснить разницу между Future
и async
и понять, как работает цикл обработки событий.Я прочитал документацию и много статей об этом.Я подумал, что понял, и попытался написать код, который создает объект Future
с вызовом sleep()
.
Сначала я попробовал с Future
, и я думаю, что он ведет себя так, как должен:
main(List<String> arguments) {
print('before future');
test_future();
print('after future');
}
test_future() {
Future (() {
print('Future active before 5 seconds call');
sleep(Duration(seconds: 5));
print('Future active after 5 seconds call');
}).then((_) => print("Future completed"));
}
Так что это возвращает:
- печать до будущего
- создайте объект будущего, поместите его в очередь событий и немедленно верните
- печать после будущего
- вызов кода будущего из очереди событий
- печатьдо 5 секунд
- ждать 5 секунд
- печать через 5 секунд *
- печать завершена
Я думаю, все это нормально.
Теперь я пытаюсь сделать то же самое с async
.Из документации добавление ключевого слова async
в функцию заставляет ее немедленно возвращать Future
.
Итак, я написал это:
main(List<String> arguments) {
print('before future 2');
test().then((_) => print("Future completed 2"));
print('after future 2');
}
test() async {
print('Future active before 5 seconds call');
sleep(Duration(seconds: 5));
print('Future active after 5 seconds call');
}
Обычно при вызове test().then()
,он должен поместить содержимое test()
в очередь событий и немедленно вернуть Future
, но нет.Поведение таково:
- печать перед будущим 2
- вызов функции test () (должен возвращать будущее, я думаю, но код выполняется прямо сейчас)
- печать через 5 секунд
- ожидание в течение 5 секунд
- печать через 5 секунд
- печать в будущем завершена 2
- печать в будущем 2
Может кто-нибудь объяснить, правильно ли я использовал async
или что-то не так?
Лучший