Библиотека 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
- StreamSink
-
Объект, принимающий события потока синхронно и асинхронно.
- StreamSubscription
-
Подписка на события из Stream.
- StreamTransformer
-
Преобразует Stream.
- StreamView
- 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