addOnExitListener 方法
在 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});