Spec-Zone.ru › Dart 2

dart:async

Класс Zone

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

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

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

Класс Zone не поддерживает наследование, но пользователи могут предоставить пользовательские области, разделив существующую область (обычно Zone.current) с помощью ZoneSpecification. Это похоже на создание нового класса, который расширяет базовый Zone класс и переопределяет некоторые методы, но без фактического создания нового класса. Вместо этого переопределяющие методы предоставляются в виде функций, которые явно принимают эквивалент своего собственного класса, класса «предок» и объект 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
inherited
Вызывается при обращении к несуществующему методу или свойству.
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
inherited
Строковое представление этого объекта.

Операторы

operator ==(Object other) → bool
inherited
Оператор равенства.
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.18.5/dart-async/Zone-class.html

Spec-Zone.ru

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