Программирование дротиков - асинхронное программирование
An asynchronous operation выполняется в потоке, отдельно от mainпоток приложения. Когда приложение вызывает метод для асинхронного выполнения операции, приложение может продолжать выполнение, пока асинхронный метод выполняет свою задачу.
пример
Давайте рассмотрим пример, чтобы понять эту концепцию. Здесь программа принимает пользовательский ввод с помощьюIO library.
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ждет ввода. Он останавливается на своем пути и больше не выполняется, пока не получит ввод пользователя.
Приведенный выше пример приведет к следующему output -
Enter your name :
Tom
// reads user input
Hello Mr. Tom
End of main
В вычислениях мы говорим, что что-то synchronousкогда он ожидает события, прежде чем продолжить. Недостатком этого подхода является то, что если часть кода выполняется слишком долго, выполнение последующих блоков, хотя и не связанных, будет заблокировано. Рассмотрим веб-сервер, который должен отвечать на несколько запросов ресурса.
Модель синхронного выполнения будет блокировать запросы любого другого пользователя до тех пор, пока он не завершит обработку текущего запроса. В таком случае, как и в случае с веб-сервером, каждый запрос должен быть независимым от других. Это означает, что веб-сервер не должен ждать завершения выполнения текущего запроса, прежде чем он ответит на запрос других пользователей.
Проще говоря, он должен принимать запросы от новых пользователей до того, как обязательно выполнит запросы предыдущих пользователей. Это называется асинхронным. Асинхронное программирование в основном означает отсутствие ожидающей или неблокирующей модели программирования. Вdart:async Пакет упрощает реализацию блоков асинхронного программирования в сценарии Dart.
пример
Следующий пример лучше иллюстрирует работу асинхронного блока.
Step 1 - Создать contact.txt файл, как указано ниже and сохранить его в папке данных текущего проекта.
1, Tom
2, John
3, Tim
4, Jane
Step 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
}
В output этой программы будет следующим -
End of main
1, Tom
2, John
3, Tim
4, Jan
«Конец основного» выполняется первым, пока сценарий продолжает чтение файла. ВFuture класс, часть dart:async, используется для получения результата вычисления после завершения асинхронной задачи. ЭтотFuture value затем используется для каких-либо действий после завершения вычислений.
После завершения операции чтения управление выполнением передается в "then()". Это связано с тем, что операция чтения может занять больше времени, и поэтому он не хочет блокировать другую часть программы.
Дротик Будущее
Сообщество Dart определяет Futureкак «средство получить ценность когда-нибудь в будущем». Проще говоря,Future objects- это механизм для представления значений, возвращаемых выражением, выполнение которого завершится позже. Некоторые из встроенных классов Dart возвращаютFuture когда вызывается асинхронный метод.
Dart - это однопоточный язык программирования. Если какой-либо код блокирует поток выполнения (например, ожидая длительной операции или блокируя ввод-вывод), программа фактически зависает.
Асинхронные операции позволяют вашей программе работать без блокировки. Дарт используетFuture objects для представления асинхронных операций.