1/Путь к первому мобильному приложению. Часть 1.13 - Изучаем язык Dart: Асинхронное программирование, async/await

В программировании традиционно код выполняется синхронно, т.е. одна операция выполняется после завершения другой.

Асинхронность подразумевает что операция может выполняться параллельно, то есть не блокировать остальные операции.

При Future функция встаёт в очередь на выполнение и возвращает незавершённый объект Future. После окончания операции Future вернётся с каким-то значением или ошибкой.

Пример реализации через async...await

// Асинхронный подход
void task_1 ( ) {
  print ( 'Task 1 done' );
}
Future<String> task_2 ( ) async {
  String result;
  print ( '... delay 3 seconds after print tasksRun ...' );
  await Future.delayed ( Duration ( seconds : 3 ) , ( ) {
    result = ' Task 2 result';
    print ( 'Task 2 done' );
  } );
  print ( '... await done ...' );
  return result;
}
void task_3 ( String task2Result ) {
  print ( 'Task 3 done, $task2Result' );
}

Future tasksRun ( ) async {
  task_1 ( );
  try {
    String task2Result = await task_2 ( );
    task_3 ( task2Result );
  }
  catch ( e ) {
    print ( 'Error $e' );
  }
}
// Программа
void main ( ) {
  tasksRun ( );
  print ( 'tasksRun' );
  // Task 1 done
  // ... delay 3 seconds after print tasksRun ...
  // tasksRun
  // Task 2 done
  // ... await done ...
  // Task 3 done, Task 2 result
}

Подход через Future API, используя метод then ( )

void printDailyNewsDigest() {
  File file = new File("dailyNewsDigest.txt");
  Future future = file.readAsString();
  future.then((content) {
    print(content);
  });
}