В программировании традиционно код выполняется синхронно, т.е. одна операция выполняется после завершения другой.
Асинхронность подразумевает что операция может выполняться параллельно, то есть не блокировать остальные операции.
При 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);
});
}