addOnExitListener 方法

void addOnExitListener(
  1. SendPort responsePort, {
  2. Object? response,
})

在 isolate 终止时在 responsePort 上请求退出消息。

isolate 在终止前将作为最后一件事情在 responsePort 上发送 response 作为消息。发送消息后,它将不再执行任何代码。

添加相同的端口多次只会导致它接收一条退出消息,使用最后一次添加的响应值,并且只需要使用 removeOnExitListener 删除一次。

如果 isolate 在接收到此请求之前已经终止,则不会发送退出消息。

response 对象必须遵循与 SendPort.send 相同的约束,当从另一个 isolate 组发送到 isolate 时;仅允许发送到所有 isolate 的简单值,如 null、布尔值、数字或字符串。

由于 isolate 并行运行,它可能在退出监听器建立之前退出,在这种情况下,不会在 responsePort 上发送响应。为了避免这种情况,可以使用 spawn 函数的相应参数,或者启动 isolate 并暂停,然后添加监听器,最后恢复 isolate。

实现

/* TODO(lrn): Can we do better? Can the system recognize this message and
 * send a reply if the receiving isolate is dead?
 */
external void addOnExitListener(SendPort responsePort, {Object? response});