- Документация
- Основы Dart 2.x
- Основы Dart 2.x (асинхронное программирование)
За последние 30 дней: 43 просмотра, 11 посетителей.
Основы Dart 2.x (асинхронное программирование)
Введение:
Традиционно в программировании используют синхронное программирование — последовательное выполнение инструкций с синхронными системными вызовами, которые полностью блокируют поток выполнения, пока системная операция, например чтение с диска или получение данных из сервера не завершится, до этого вы не будите иметь возможность работать с программой.
- Асинхронность (asynchrony) подразумевает, что операция может быть выполнена кем-то на стороне: удаленным веб-узлом, сервером или другим устройством за пределами текущего вычислительного устройства при этом не блокируя главный поток выполнения программы.
- Асинхронность в программировании — выполнение процесса в неблокирующем режиме системного вызова, что позволяет потоку программы продолжить обработку. Проще говоря, главный "процесс" ставит задачу и передает ее другому независимому "процессу", при этом сам продолжает работать.
Например: Вы решили купить новый аккумулятор на свою "Приору", на сайте или в мобильном приложении в фильтре товаров, выбираете аккумулятор по необходимым вам критериям (Производитель, Ёмкость, Сила тока холодной прокрутки) и после нажатия кнопки "найти товар по заданным критериям" выполняется асинхронная операция поиска на сервере необходимого вам товара, во время этого поиска, вы можете скролить сайт, написать в чат менеджеру магазина, вообщем выполнять ещё какие либо действия пока происходит поиск товара. Если бы операция выполнялась синхронно, вы бы не смогли взаимодействовать с приложением пока не завершится поиск и вывод на страницу товара.
Асинхронное программирование в Dart:
DOC:dart.dev
Код в Dart работает в одном треде (потоке) выполнения. Если код занят долгими вычислениями или ожидает операцию ввода/вывода, то вся программа приостанавливается.
Dart использует futures для представления результатов асинхронных операций. Для работы с futures можно использовать async и await или Future API.
future - объект класса Future<Т>, который представляет собой асинхронную операцию, возвращающую результат типа T. Если результат операции не используются, то тип future указывают Future<void>. При вызове функции, возвращающей future, происходит две вещи:
- Функция встает в очередь на выполнение и возвращает незавершенный объект Future.
- Когда операция завершена, future завершается со значением или ошибкой.
Для написания кода, зависящего от future, у вас есть два варианта:
- a) Использовать async — await
- b) Использовать Future API
async — await
Ключевые слова async и await являются частью поддержки асинхронности в Dart. Они позволяют писать асинхронный код, который выглядит как синхронный код и не использует Future API.
Асинхронная функция — это функция, перед телом которой находится ключевое слово async. Ключевое слово await работает только в асинхронных функциях.
Лекция:async\await
Подробный пример
Future API
- Если писать асинхронный код с помощью Future API, используется метод then() для регистрации обратного вызова. Этот обратный вызов сработает, когда future завершится.
Метод printDailyNewsDigest() использует readAsString(), который не будет блокировать выполнение программы. Вызов readAsString() будет стоять в очереди на выполнение и не будет останавливать работу остальной части кода. Программа печатает номера лотереи, прогноз погоды и футбольный счет. Когда readAsString() заканчивает чтение файла новостей, программа печатает его содержимое. Если readAsString() занимает некоторое время, чтобы завершить свою работу, никой проблемы в этом не будет: пользователь может прочитать другие материалы до того, как будет напечатан ежедневный дайджест новостей.
Подборка заметок