Учебники

Программирование дротиков — Async

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

пример

Давайте рассмотрим пример, чтобы понять эту концепцию. Здесь программа принимает пользовательский ввод с использованием библиотеки IO .

Live Demo

import 'dart:io'; 
void main() { 
   print("Enter your name :");            
   
   // prompt for user input 
   String name = stdin.readLineSync();  
   
   // this is a synchronous method that reads user input 
   print("Hello Mr. ${name}"); 
   print("End of main"); 
} 

ReadLineSync () является синхронным методом. Это означает, что выполнение всех инструкций, следующих за вызовом функции readLineSync (), будет заблокировано, пока метод readLineSync () не завершит выполнение.

Stdin.readLineSync ожидает ввода. Он останавливается на своих треках и больше не выполняется, пока не получит ввод от пользователя.

Приведенный выше пример приведет к следующему выводу:

Enter your name :     
Tom                   

// reads user input  
Hello Mr. Tom 
End of main

В вычислениях мы говорим, что что-то синхронно, когда оно ожидает события, прежде чем продолжить. Недостатком этого подхода является то, что если выполнение части кода занимает слишком много времени, последующие блоки, хотя и не связанные, будут заблокированы для выполнения. Рассмотрим веб-сервер, который должен отвечать на несколько запросов на ресурс.

Модель синхронного выполнения будет блокировать каждый запрос другого пользователя, пока не завершит обработку текущего запроса. В таком случае, как и у веб-сервера, каждый запрос должен быть независимым от других. Это означает, что веб-сервер не должен ждать завершения текущего запроса, прежде чем он ответит на запрос других пользователей.

Проще говоря, он должен принимать запросы от новых пользователей, прежде чем обязательно завершить запросы предыдущих пользователей. Это называется асинхронным. Асинхронное программирование, в основном, означает отсутствие ожидающей или неблокирующей модели программирования. Пакет dart: async облегчает реализацию блоков асинхронного программирования в сценарии Dart.

пример

Следующий пример лучше иллюстрирует функционирование асинхронного блока.

Шаг 1 — Создайте файл contact.txt, как указано ниже, и сохраните его в папке данных в текущем проекте.

1, Tom 
2, John 
3, Tim 
4, Jane 

Шаг 2 — Напишите программу, которая будет читать файл, не блокируя другие части приложения.

import "dart:async"; 
import "dart:io";  

void main(){ 
   File file = new File( Directory.current.path+"\\data\\contact.txt"); 
   Future<String> f = file.readAsString();  
  
   // returns a futrue, this is Async method 
   f.then((data)=>print(data));  
   
   // once file is read , call back method is invoked  
   print("End of main");  
   // this get printed first, showing fileReading is non blocking or async 
}

Результат этой программы будет следующим:

End of main 
1, Tom 
2, John 
3, Tim 
4, Jan

«Конец основного» выполняется первым, в то время как скрипт продолжает чтение файла. Класс Future , часть dart: async , используется для получения результата вычислений после выполнения асинхронной задачи. Это значение Future затем используется для выполнения чего-либо после завершения вычислений.

Как только операция чтения завершена, управление выполнением передается в рамках функции then () . Это потому, что операция чтения может занять больше времени, и поэтому она не хочет блокировать другую часть программы.

Дартс Будущее

Сообщество дартс определяет будущее как «средство для получения ценности когда-нибудь в будущем». Проще говоря, объекты Future представляют собой механизм для представления значений, возвращаемых выражением, выполнение которого будет завершено в более поздний момент времени. Некоторые из встроенных классов Dart возвращают Future при вызове асинхронного метода.

Дарт это однопоточный язык программирования. Если какой-либо код блокирует поток выполнения (например, из-за ожидания длительной операции или блокировки ввода-вывода), программа эффективно останавливается.

Асинхронные операции позволяют вашей программе работать без блокировки. Dart использует объекты Future для представления асинхронных операций.