#flutter #dart #asynchronous #async-await #synchronous
#flutter #dart #асинхронный #async-ожидание #синхронный
Вопрос:
Мы знаем, что в Dart все работает синхронно и в соответствии с некоторым определением, которое я нашел в Интернете
Когда вы выполняете что-то синхронно, вы ждете его завершения, прежде чем перейти к другой задаче. Когда вы выполняете что-то асинхронно, вы можете перейти к другой задаче до ее завершения.
Чего я здесь не понимаю, так это того, почему b печатается перед c Я имею в виду, что если код выполняется синхронно, то он должен дождаться завершения строки 2 для печати c и только после печати c он должен печатать b
Ps- Я знаю, что могу использовать ключевые слова async и await, чтобы дождаться завершения выполнения строки 2. Я просто хочу понять, как работает этот синхронный код.
void main(){
print("a");
Future.delayed(Duration(seconds:
5),(){
print("c");
});
print("b");
}
Output- a
b
c
Ответ №1:
Когда вы пишете :
print("a");
Future.delayed(Duration(seconds: 5),(){
print("c");
});
print("b");
Вы говорите программе напечатать «a», затем запустить a Future
, который разрешится через 5 секунд, и напечатать «c», затем напечатать «b»; но вы никогда не говорите программе ждать Future
завершения.
Который является синхронным.
И именно поэтому вы должны использовать await
ключевое слово, чтобы заставить программу ждать Future
завершения, прежде чем переходить к следующей инструкции.
Комментарии:
1. Хорошо объяснено!
Ответ №2:
Нет, не совсем. Он будет печатать только c
раньше b
, если вы используете await
ключевое слово. Это ключевое слово указывает Dart подождать, пока это будущее не будет завершено, а затем перейти к следующей задаче.
Например
void main() async {
print("a");
//await tells dart to wait till this completes. If it's not used before a future, then dart doesn't wait till the future is completed and executes the next tasks/code.
await Future.delayed(Duration(seconds:
5),(){
print("c");
});
print("b");
}
Вывод
Output- a
c
b