Spec-Zone.ru › Dart 2

dart:async

Класс Zone

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

Весь код выполняется в контексте зоны, доступной коду как Zone.current. Начальная функция main выполняется в контексте зоны по умолчанию (Zone.root). Код можно выполнять в другой зоне, используя runZoned или runZonedGuarded, чтобы создать новую зону и выполнить код в ней, либо Zone.run, чтобы выполнить код в контексте существующей зоны, которая могла быть создана ранее с помощью Zone.fork.

Разработчики могут создавать новые зоны, переопределяющие некоторые функции существующей зоны. Например, пользовательские зоны могут заменять или изменять поведение print, таймеров, микрозадач или способ обработки неперехваченных ошибок.

Класс Zone нельзя наследовать, но пользователи могут создавать пользовательские зоны, разветвляя существующую зону (обычно Zone.current) с помощью ZoneSpecification. Это похоже на создание нового класса, расширяющего базовый класс Zone и переопределяющего некоторые методы, но без фактического создания нового класса. Вместо этого переопределяющие методы задаются как функции, которым явно передаются эквиваленты их собственного класса, класса «super» и объекта this в качестве параметров.

Асинхронные обратные вызовы всегда выполняются в контексте зоны, в которой они были запланированы. Это реализовано в два этапа:

  1. Сначала обратный вызов регистрируется с помощью одного из методов: registerCallback, registerUnaryCallback или registerBinaryCallback. Это позволяет зоне зафиксировать наличие обратного вызова и, возможно, изменить его (вернув другой обратный вызов). Код, выполняющий регистрацию (например, Future.then), также запоминает текущую зону, чтобы позже запустить обратный вызов в этой зоне.
  2. Позднее зарегистрированный обратный вызов запускается в запомненной зоне с помощью одного из методов: run, runUnary или runBinary.

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

Для удобства зоны предоставляют bindCallback (а также соответствующие методы bindUnaryCallback и bindBinaryCallback), упрощающие соблюдение контракта зоны: эти функции сначала вызывают соответствующие функции register, а затем оборачивают возвращенную функцию так, чтобы при последующем асинхронном вызове она выполнялась в текущей зоне.

Аналогично, зоны предоставляют bindCallbackGuarded (а также соответствующие методы bindUnaryCallbackGuarded и bindBinaryCallbackGuarded) для случаев, когда обратный вызов должен вызываться через Zone.runGuarded.

Свойства

errorZone → Zone
только для чтения
Зона ошибок отвечает за обработку неперехваченных ошибок.
hashCode → int
только для чтенияунаследовано
Хеш-код этого объекта.
parent → Zone?
только для чтения
Родительская зона этой зоны.
runtimeType → Type
только для чтенияунаследовано
Представление типа объекта во время выполнения.

Методы

bindBinaryCallback<R, T1, T2>(R callback(T1 argument1, T2 argument2)) → ZoneBinaryCallback<R, T1, T2>
Регистрирует предоставленный callback и возвращает функцию, которая будет выполняться в этой зоне.
bindBinaryCallbackGuarded<T1, T2>(void callback(T1 argument1, T2 argument2)) → void Function(T1, T2)
Регистрирует предоставленный callback и возвращает функцию, которая будет выполняться в этой зоне.
bindCallback<R>(R callback()) → ZoneCallback<R>
Регистрирует предоставленный callback и возвращает функцию, которая будет выполняться в этой зоне.
bindCallbackGuarded(void callback()) → void Function()
Регистрирует предоставленный callback и возвращает функцию, которая будет выполняться в этой зоне.
bindUnaryCallback<R, T>(R callback(T argument)) → ZoneUnaryCallback<R, T>
Регистрирует предоставленный callback и возвращает функцию, которая будет выполняться в этой зоне.
bindUnaryCallbackGuarded<T>(void callback(T argument)) → void Function(T)
Регистрирует предоставленный callback и возвращает функцию, которая будет выполняться в этой зоне.
createPeriodicTimer(Duration period, void callback(Timer timer)) → Timer
Создает периодический Timer, обратный вызов которого выполняется в этой зоне.
createTimer(Duration duration, void callback()) → Timer
Создает Timer, обратный вызов которого выполняется в этой зоне.
errorCallback(Object error, StackTrace? stackTrace) → AsyncError?
Перехватывает ошибки, программно добавленные в Future или Stream.
fork({ZoneSpecification? specification, Map<Object?, Object?>? zoneValues}) → Zone
Создает новую зону, дочернюю по отношению к этой зоне.
handleUncaughtError(Object error, StackTrace stackTrace) → void
Обрабатывает неперехваченные асинхронные ошибки.
inSameErrorZone(Zone otherZone) → bool
Находятся ли эта зона и otherZone в одной зоне ошибок.
noSuchMethod(Invocation invocation) → dynamic
унаследовано
Вызывается при обращении к несуществующему методу или свойству.
print(String line) → void
Выводит заданную line.
registerBinaryCallback<R, T1, T2>(R callback(T1 arg1, T2 arg2)) → ZoneBinaryCallback<R, T1, T2>
Регистрирует указанный обратный вызов в этой зоне.
registerCallback<R>(R callback()) → ZoneCallback<R>
Регистрирует указанный обратный вызов в этой зоне.
registerUnaryCallback<R, T>(R callback(T arg)) → ZoneUnaryCallback<R, T>
Регистрирует указанный обратный вызов в этой зоне.
run<R>(R action()) → R
Выполняет action в этой зоне.
runBinary<R, T1, T2>(R action(T1 argument1, T2 argument2), T1 argument1, T2 argument2) → R
Выполняет указанный action с argument1 и argument2 в этой зоне.
runBinaryGuarded<T1, T2>(void action(T1 argument1, T2 argument2), T1 argument1, T2 argument2) → void
Выполняет указанный action с argument1 и argument2 в этой зоне и перехватывает синхронные ошибки.
runGuarded(void action()) → void
Выполняет указанный action в этой зоне и перехватывает синхронные ошибки.
runUnary<R, T>(R action(T argument), T argument) → R
Выполняет указанный action с argument в этой зоне.
runUnaryGuarded<T>(void action(T argument), T argument) → void
Выполняет указанный action с argument в этой зоне и перехватывает синхронные ошибки.
scheduleMicrotask(void callback()) → void
Асинхронно запускает callback в этой зоне.
toString() → String
унаследовано
Строковое представление этого объекта.

Операторы

operator ==(Object other) → bool
унаследовано
Оператор равенства.
operator [](Object? key) → dynamic
Получает значение зоны, связанное с key.

Статические свойства

current → Zone
только для чтения
Зона, активная в данный момент.

Константы

root → const Zone
Корневая зона.
_rootZone

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-async/Zone-class.html

Spec-Zone.ru

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