Spec-Zone.ru › Dart 1

Библиотека dart:async

Поддержка асинхронного программирования с классами, такими как Future и Stream.

Понимание Future и Stream является предпосылкой для написания практически любого Dart-приложения.

Чтобы использовать эту библиотеку в своём коде:

import 'dart:async';

Future

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

Многие методы в библиотеках Dart возвращают Future при выполнении задач. Например, при привязке HttpServer к хосту и порту метод bind() возвращает Future.

 HttpServer.bind('127.0.0.1', 4444)
     .then((server) => print('${server.isBroadcast}'))
     .catchError(print);

Future.then регистрирует функцию обратного вызова, которая выполняется, когда операция Future, в данном случае метод bind(), успешно завершается. Значение, возвращённое операцией, передаётся в функцию обратного вызова. В этом примере метод bind() возвращает объект HttpServer. Функция обратного вызова печатает одно из его свойств. Future.catchError регистрирует функцию обратного вызова, которая выполняется, если в Future произошла ошибка.

Stream

Stream предоставляет асинхронную последовательность данных. Примеры последовательностей данных включают отдельные события, такие как щелчки мыши, или последовательные фрагменты больших данных, такие как несколько байтовых списков с содержимым файла, например щелчки мыши, и поток байтовых списков, считываемых из файла. В следующем примере файл открывается для чтения. Stream.listen регистрирует функцию обратного вызова, которая выполняется каждый раз, когда доступны дополнительные данные.

Stream<List<int>> stream = new File('quotes.txt').openRead();
stream.transform(UTF8.decoder).listen(print);

Поток испускает последовательность списка байтов. Программа должна интерпретировать байты или обрабатывать необработанные байтовые данные. Здесь код использует декодер UTF8 (предоставленный в библиотеке dart:convert) для преобразования последовательности байтов в последовательность Dart-строк.

Другое распространённое применение потоков — для событий, генерируемых пользователем, в веб-приложении: следующий код прослушивает щелчки мыши по кнопке.

querySelector('#myButton').onClick.listen((_) => print('Click.'));

Другие ресурсы

  • Раздел dart:async в туре по библиотеке: краткий обзор асинхронного программирования.

  • Использование API на основе Future: более подробный взгляд на Future и как использовать их для написания асинхронного кода Dart.

  • Future и обработка ошибок: всё, что вы хотели знать об обработке ошибок и исключений при работе с Future (но боялись спросить).

  • Цикл событий и Dart: узнайте, как Dart обрабатывает очередь событий и очередь микрозадач, чтобы писать лучший асинхронный код с меньшим количеством неожиданностей.

  • пакет test: Асинхронные тесты: как тестировать асинхронный код.

Типы

ControllerCallback() → void

Тип функций обратного вызова контроллера потока: onListen, onPause и onResume.

ControllerCancelCallback() → dynamic

Тип функций обратного вызова контроллера потока onCancel.

CreatePeriodicTimerHandler(Zone self, ZoneDelegate parent, Zone zone, Duration period, void f(Timer timer)) → Timer
CreateTimerHandler(Zone self, ZoneDelegate parent, Zone zone, Duration duration, void f()) → Timer
ErrorCallbackHandler(Zone self, ZoneDelegate parent, Zone zone, Object error, StackTrace stackTrace) → AsyncError
ForkHandler(Zone self, ZoneDelegate parent, Zone zone, ZoneSpecification specification, Map zoneValues) → Zone
HandleUncaughtErrorHandler(Zone self, ZoneDelegate parent, Zone zone, error, StackTrace stackTrace) → R
PrintHandler(Zone self, ZoneDelegate parent, Zone zone, String line) → void
RegisterBinaryCallbackHandler(Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2)) → ZoneBinaryCallback<R, T1, T2>
RegisterCallbackHandler(Zone self, ZoneDelegate parent, Zone zone, R f()) → ZoneCallback<R>
RegisterUnaryCallbackHandler(Zone self, ZoneDelegate parent, Zone zone, R f(T arg)) → ZoneUnaryCallback<R, T>
RunBinaryHandler(Zone self, ZoneDelegate parent, Zone zone, R f(T1 arg1, T2 arg2), T1 arg1, T2 arg2) → R
RunHandler(Zone self, ZoneDelegate parent, Zone zone, R f()) → R
RunUnaryHandler(Zone self, ZoneDelegate parent, Zone zone, R f(T arg), T arg) → R
ScheduleMicrotaskHandler(Zone self, ZoneDelegate parent, Zone zone, void f()) → void
ZoneBinaryCallback(T1 arg1, T2 arg2) → R
ZoneCallback() → R
ZoneUnaryCallback(T arg) → R

Функции

runZoned<R>(R body(), { Map zoneValues, ZoneSpecification zoneSpecification, Function onError }) → R

Выполняет body в своей собственной зоне.

scheduleMicrotask(void callback()) → void

Выполняет функцию асинхронно.

Классы

Completer

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

DeferredLibrary

Указывает, что загрузка libraryName отложена.

EventSink

Sink, поддерживающий добавление ошибок.

Future

Объект, представляющий отложенное вычисление.

FutureOr

Тип, представляющий значения, которые являются либо Future<T>, либо T.

Stream

Источник асинхронных событий данных.

StreamConsumer

Абстрактный интерфейс для "синка", принимающего несколько целых потоков.

StreamController

Контроллер со связанным потоком.

StreamIterator

Интерфейс, подобный Iterator, для значений Stream.

StreamSink

Объект, принимающий события потока синхронно и асинхронно.

StreamSubscription

Подписка на события из Stream.

StreamTransformer

Преобразует Stream.

StreamView

Обёртка Stream, которая раскрывает только интерфейс Stream.

SynchronousStreamController

Контроллер потока, который доставляет события синхронно.

Timer

Таймер обратного отсчёта, который можно настроить на однократное или многократное срабатывание.

Zone

Зона представляет собой среду, которая остаётся стабильной во время асинхронных вызовов.

ZoneDelegate

Изменённый вид родительской зоны.

ZoneSpecification

Этот класс предоставляет спецификацию для разветвлённой зоны.

Исключения/Ошибки

AsyncError

Пара ошибок и стека вызовов. Возвращается методом Zone.errorCallback.

DeferredLoadException

Выбрасывается, когда отложенная библиотека не загружается.

TimeoutException

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

© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-async/dart-async-library.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API