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