Андрей Кейда
Андрей Кейда
За все время: 478 просмотров, 96 посетителей.
За последние 30 дней: 1 просмотр, 1 посетитель.

Основы Dart 2.x (асинхронное программирование)

Введение:

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

Например: Вы решили купить новый аккумулятор на свою "Приору", на сайте или в мобильном приложении в фильтре товаров, выбираете аккумулятор по необходимым вам критериям (Производитель, Ёмкость, Сила тока холодной прокрутки) и после нажатия кнопки "найти товар по заданным критериям" выполняется асинхронная операция поиска на сервере необходимого вам товара, во время этого поиска, вы можете скролить сайт, написать в чат менеджеру магазина, вообщем выполнять ещё какие либо действия пока происходит поиск товара. Если бы операция выполнялась синхронно, вы бы не смогли взаимодействовать с приложением пока не завершится поиск и вывод на страницу товара.
pic

Асинхронное программирование в Dart:

DOC:dart.dev
Код в Dart работает в одном треде (потоке) выполнения. Если код занят долгими вычислениями или ожидает операцию ввода/вывода, то вся программа приостанавливается.
Dart использует futures для представления результатов асинхронных операций. Для работы с futures можно использовать async и await или Future API.

Для написания кода, зависящего от future, у вас есть два варианта:

async — await

Лекция:async\await
Подробный пример

Future API

Метод printDailyNewsDigest() использует readAsString(), который не будет блокировать выполнение программы. Вызов readAsString() будет стоять в очереди на выполнение и не будет останавливать работу остальной части кода. Программа печатает номера лотереи, прогноз погоды и футбольный счет. Когда readAsString() заканчивает чтение файла новостей, программа печатает его содержимое. Если readAsString() занимает некоторое время, чтобы завершить свою работу, никой проблемы в этом не будет: пользователь может прочитать другие материалы до того, как будет напечатан ежедневный дайджест новостей.

Подборка заметок