Понимание асинхронности и синхронности в Dart

#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