Isolatefinal

独立的 Dart 执行上下文。

所有 Dart 代码都在一个隔离区中运行,代码只能访问同一个隔离区中的类和值。不同的隔离区可以通过端口发送值进行通信(参见 ReceivePortSendPort)。

Isolate 对象是隔离区的引用,通常与当前隔离区不同。它代表并可用于控制其他隔离区。

当创建一个新的隔离区时,如果创建操作成功,创建隔离区会收到一个表示新隔离区的 Isolate 对象。

隔离区在其自己的事件循环中运行代码,每个事件都可能在一个嵌套的微任务队列中运行更小的任务。

Isolate 对象允许其他隔离区控制其代表隔离区的事件循环,并检查隔离区,例如通过暂停隔离区或在隔离区出现未捕获的错误时获取事件。

controlPort 用于标识和获取控制隔离区的访问权限,而 pauseCapabilityterminateCapability 用于保护对某些控制操作的访问。例如,在一个没有 pauseCapabilityIsolate 对象上调用 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
pingkill的参数:在下一次事件之前请求操作。
immediate → const int
pingkill的参数:立即请求操作。