Dart 程序未退出

テッド*_*テッド 3 dart dart-isolates

我无法查明为什么我的 dart 程序没有终止。我很确定这与隔离或流控制器有关,并确保它们关闭,但我无法弄清楚问题是什么。

在我所有的StreamController手机上,我都在打电话await streamControllerName.close();,但我认为有一个我不知道的隔离关闭机制。事件循环没有完成并且程序没有退出是否有任何原因?由于代码很长,因此很难提供更多详细信息。

jul*_*101 8

当主隔离区无事可做时(因此没有代码正在执行,事件或微任务队列上没有事件)并且没有订阅任何可以将事件生成到主隔离区中的内容,Dart 程序就会停止。

除了Timer可以产生延迟事件之外,我们还ReceivePort可以将事件从另一个隔离区发送到隔离区。应该注意的是,Dart 不会跟踪 aReceivePortSendPort指向该的实例之间的关系ReceivePort

这意味着 Dart 不知道 a 何时ReceivePort不再“使用”,因此开发人员需要在它们不再“使用”时ReceivePort 通过调用close()每个实例上的方法(注意SendPort没有任何close()方法)来确保关闭任何打开的对象。正在使用。

只要ReceivePort主隔离中存在任何打开的情况,程序就会继续运行,因为可能会从这些ReceivePort实例之一生成事件。