Dart 程序没有退出

Dart program not exiting

我无法找到为什么我的 dart 程序没有终止。我很确定这与隔离或流控制器有关,并确保它们已关闭,但我无法确定问题所在。

在我所有的 StreamController 上,我都在调用 await streamControllerName.close();,但我认为有一个我不知道的隔离关闭机制。是否有任何原因导致事件循环没有完成,所以程序没有退出?由于代码很长,很难提供更多细节。

Dart 程序在 main isolate 无事可做时停止(因此没有代码在执行,事件或微任务队列上也没有事件)并且没有任何订阅可以将事件生成到 main isolate 中。

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

ReceivePortSendPort 实例之间的关系

这意味着 Dart 不知道 ReceivePort 何时不再“使用”,因此由开发人员通过调用 [=17] 来确保关闭任何打开的 ReceivePort =] 方法(注意 SendPort 没有任何 close() 方法)当它们不再使用时。

只要主隔离中有任何打开的 ReceivePort,程序就会继续 运行,因为这些 ReceivePort 实例之一可能会产生一个事件。