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