一个独立的 Dart 执行上下文。
所有 Dart 代码都在隔离中运行,并且代码只能访问来自同一隔离的类和值。不同的隔离可以通过通过端口发送值(参见 ReceivePort,SendPort)进行通信。
一个 Isolate
对象是对隔离的引用,通常不同于当前隔离。它表示其他隔离,并可用于控制其他隔离。
当启动新的隔离时,如果启动操作成功,启动隔离会收到一个表示新隔离的 Isolate
对象。
隔离在其自己的事件循环中运行代码,每个事件都可以在嵌套的微任务队列中运行更小的任务。
Isolate
对象允许其他隔离控制它所代表的隔离的事件循环,并检查隔离,例如通过暂停隔离或当隔离有未捕获的错误时获取事件。
controlPort 识别并提供对控制隔离的访问,pauseCapability 和 terminateCapability 保护对一些控制操作的访问。例如,在没有 pauseCapability 的情况下创建的 Isolate
对象上调用 pause,没有效果。
由启动操作提供的 Isolate
对象将具有控制隔离所需的控制端口和功能。如果需要,可以使用 Isolate.new 构造函数创建不包含这些功能的新隔离对象。
Isolate
对象不能通过 SendPort
发送,但控制端口和功能可以发送,并且可以在接收端口的隔离中用于创建一个新的功能齐全的 Isolate
对象。
构造函数
- Isolate(SendPort controlPort, {Capability? pauseCapability, Capability? terminateCapability})
- 创建一个具有有限功能集的新 Isolate 对象。
属性
- controlPort → SendPort
- 用于向隔离发送控制消息的控制端口。final
- debugName → String?
- 用于调试目的显示的 Isolate 名称。没有设置器
- errors → Stream
- 返回隔离中未捕获错误的广播流。没有设置器
- hashCode → int
- 此对象的哈希码。没有设置器继承
- pauseCapability → Capability?
- 授予暂停隔离的能力的能力。final
- runtimeType → Type
- 对象运行时类型的表示。没有设置器继承
- terminateCapability → Capability?
- 授予终止隔离器的能力。final
方法
-
addErrorListener(
SendPort port) → void - 请求将隔离器未捕获的错误发送回
port
。 -
addOnExitListener(
SendPort responsePort, {Object? response}) → void - 在隔离器终止时,请求在
responsePort
上发送退出消息。 -
kill(
{int priority = beforeNextEvent}) → void - 请求隔离器关闭。
-
noSuchMethod(
Invocation invocation) → dynamic - 在访问不存在的方法或属性时调用。继承
-
pause(
[Capability? resumeCapability]) → Capability - 请求隔离器暂停。
-
ping(
SendPort responsePort, {Object? response, int priority = immediate}) → void - 请求隔离器在
responsePort
上发送response
。 -
removeErrorListener(
SendPort port) → void - 停止监听隔离器未捕获的错误。
-
removeOnExitListener(
SendPort responsePort) → void - 停止监听隔离器的退出消息。
-
resume(
Capability resumeCapability) → void - 恢复已暂停的隔离器。
-
setErrorsFatal(
bool errorsAreFatal) → void - 设置是否未捕获的错误将终止隔离。
-
toString(
) → String - 该对象的字符串表示形式。继承
运算符
-
operator ==(
Object other) → bool - 等号运算符。继承
静态属性
- current → Isolate
- 表示当前隔离的Isolate对象。没有设置器
-
packageConfig → Future<
Uri?> - 当前隔离的包配置文件的位置。没有设置器
- packageConfigSync → Uri?
- 当前隔离的包配置文件的位置。没有设置器
静态方法
-
exit(
[SendPort? finalMessagePort, Object? message]) → Never - 同步终止当前隔离。
-
resolvePackageUri(
Uri packageUri) → Future< Uri?> - 将
package:
URI解析为其实际位置。 -
resolvePackageUriSync(
Uri packageUri) → Uri? - 将
package:
URI解析为其实际位置。 -
run<
R> (FutureOr< String? debugName}) → Future<R> computation(), {R> - 在一个新隔离中运行
computation
并返回结果。 -
spawn<
T> (void entryPoint(T message), T message, {bool paused = false, bool errorsAreFatal = true, SendPort? onExit, SendPort? onError, String? debugName}) → Future< Isolate> - 创建并启动一个与当前隔离进程共享相同代码的新隔离进程。
-
spawnUri(
Uri uri, List< String> args, dynamic message, {bool paused = false, SendPort? onExit, SendPort? onError, bool errorsAreFatal = true, bool? checked, Map<String, String> ? environment, Uri? packageRoot, Uri? packageConfig, bool automaticPackageResolution = false, String? debugName}) → Future<Isolate> - 创建并启动一个运行指定URI库中代码的新隔离进程。
常量
- beforeNextEvent → const int
ping
和kill
的参数:在下一个事件之前请求操作。- immediate → const int
ping
和kill
的参数:请求立即执行操作。