独立的 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} priority) → 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< R> computation(), {String? debugName}) → Future<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库中代码的isolate。
常量
- beforeNextEvent → const int
ping
和kill
的参数:在下一次事件之前请求操作。- immediate → const int
ping
和kill
的参数:立即请求操作。