Dart 程序没有退出
Dart program not exiting
我无法找到为什么我的 dart 程序没有终止。我很确定这与隔离或流控制器有关,并确保它们已关闭,但我无法确定问题所在。
在我所有的 StreamController
上,我都在调用 await streamControllerName.close();
,但我认为有一个我不知道的隔离关闭机制。是否有任何原因导致事件循环没有完成,所以程序没有退出?由于代码很长,很难提供更多细节。
Dart 程序在 main isolate 无事可做时停止(因此没有代码在执行,事件或微任务队列上也没有事件)并且没有任何订阅可以将事件生成到 main isolate 中。
除了可以产生延迟事件的 Timer
之外,我们还有 ReceivePort
允许我们将事件从另一个隔离区发送到一个隔离区。应该注意的是,Dart 不会跟踪指向 ReceivePort
.
的 ReceivePort
和 SendPort
实例之间的关系
这意味着 Dart 不知道 ReceivePort
何时不再“使用”,因此由开发人员通过调用 [=17] 来确保关闭任何打开的 ReceivePort
=] 方法(注意 SendPort
没有任何 close()
方法)当它们不再使用时。
只要主隔离中有任何打开的 ReceivePort
,程序就会继续 运行,因为这些 ReceivePort
实例之一可能会产生一个事件。
我无法找到为什么我的 dart 程序没有终止。我很确定这与隔离或流控制器有关,并确保它们已关闭,但我无法确定问题所在。
在我所有的 StreamController
上,我都在调用 await streamControllerName.close();
,但我认为有一个我不知道的隔离关闭机制。是否有任何原因导致事件循环没有完成,所以程序没有退出?由于代码很长,很难提供更多细节。
Dart 程序在 main isolate 无事可做时停止(因此没有代码在执行,事件或微任务队列上也没有事件)并且没有任何订阅可以将事件生成到 main isolate 中。
除了可以产生延迟事件的 Timer
之外,我们还有 ReceivePort
允许我们将事件从另一个隔离区发送到一个隔离区。应该注意的是,Dart 不会跟踪指向 ReceivePort
.
ReceivePort
和 SendPort
实例之间的关系
这意味着 Dart 不知道 ReceivePort
何时不再“使用”,因此由开发人员通过调用 [=17] 来确保关闭任何打开的 ReceivePort
=] 方法(注意 SendPort
没有任何 close()
方法)当它们不再使用时。
只要主隔离中有任何打开的 ReceivePort
,程序就会继续 运行,因为这些 ReceivePort
实例之一可能会产生一个事件。