Zone抽象 最终

区域表示一个在异步调用中保持稳定的运行环境。

所有代码都在区域的上下文中执行,对代码作为 Zone.current 可用。初始的 main 函数在默认区域的上下文中运行(Zone.root)。可以使用 runZonedrunZonedGuarded 在不同的区域中运行代码,以创建新的区域并在其中运行代码,或者使用 Zone.run 在现有区域的上下文中运行代码,该区域可能以前使用 Zone.fork 创建。

开发者可以创建一个新的区域,该区域覆盖现有区域的一些功能。例如,自定义区域可以替换或修改 print、计时器、微任务或未捕获的错误处理的行为。

区域类 Zone 不可继承,但用户可以通过使用 ZoneSpecification 在现有区域(通常是 Zone.current)上分叉来提供自定义区域。这与创建一个新的类以扩展基本 Zone 类并覆盖一些方法类似,但不需要实际创建新类。相反,覆盖的方法作为函数提供,这些函数明确地将它们的等效类、“父”类和 this 对象作为参数。

异步回调总是在它们被安排的区域上下文中运行。这通过两个步骤实现

  1. 首先使用 registerCallbackregisterUnaryCallbackregisterBinaryCallback 之一注册回调。这允许区域记录存在回调并可能修改它(通过返回不同的回调)。执行注册的代码(例如,Future.then)还记住当前区域,以便以后可以在该区域中运行回调。
  2. 稍后,使用 runrunUnaryrunBinary 之一在记住的区域中运行已注册的回调。

所有这些都由平台代码内部处理,大多数用户无需担心。然而,新异步操作的开发者,这些操作由底层系统提供,必须遵循协议以实现区域兼容。

为了方便起见,区域提供了 bindCallback(以及相应的 bindUnaryCallbackbindBinaryCallback),以便更容易遵守区域合约:这些函数首先调用相应的 register 函数,然后包装返回的函数,以便稍后在异步调用时在当前区域中运行。

类似地,区域在回调应通过 Zone.runGuarded 调用时提供了 bindCallbackGuarded(以及相应的 bindUnaryCallbackGuardedbindBinaryCallbackGuarded)。

注解
  • @vmIsolateUnsendable

属性

errorZone 区域
错误区域负责处理未捕获的错误。
没有设置器
hashCode int
此对象的哈希值。
无setter继承
parent Zone?
此区域的父区域。
没有设置器
runtimeType Type
对象运行时类型的表示。
无setter继承

方法

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?
当程序性地添加到FutureStream时拦截错误。
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
在此区域内以 argument1argument2 执行给定的 action
runBinaryGuarded<T1, T2>(void action(T1 argument1, T2 argument2), T1 argument1, T2 argument2) → void
在此区域内以 argument1argument2 执行给定的 action 并捕获同步错误。
runGuarded(void action()) → void
在此区域内执行给定的 action 并捕获同步错误。
runUnary<R, T>(R action(T argument), T argument) → R
在当前区域执行给定的 actionargument
runUnaryGuarded<T>(void action(T argument), T argument) → void
在当前区域执行给定的 actionargument 并捕获同步错误。
scheduleMicrotask(void callback()) → void
在当前区域异步运行 callback
toString() String
该对象的字符串表示形式。
继承

操作符

operator ==(Object other) bool
相等操作符。
继承
operator [](Object? key) → dynamic
检索与 key 关联的区域值。

静态属性

current Zone
当前活动区域。
没有设置器

常量

root → const Zone
根区域。