addOnExitListener方法

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

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

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

添加相同的端口号多次只会使其接收一个退出消息,使用最后添加的响应值,并且只需要使用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});