dart - Dart 程序退出而不执行最后一条语句
问题描述
我正在尝试理解 Streams 并编写了一些代码。一切似乎都正常,程序以状态码 0 退出。但它不打印“循环完成”和“主要完成”字符串。我不知道为什么。
import 'dart:async';
Stream<int> countStream(int to) async* {
for (int i = 1; i <= to; i++) {
yield i;
}
}
class Retry {
StreamController<int> _outgoing;
Retry(Stream<int> incoming) {
_outgoing = StreamController<int>();
_outgoing.addStream(incoming);
}
Future<void> process() async {
await for (final i in _outgoing.stream) {
print("got $i");
}
print('loop done'); // Not printed
}
}
void main() async {
var stream = countStream(4);
var retry = Retry(stream);
await retry.process();
print('main done'); // Not printed
}
解决方案
_outgoing.stream
永远不会关闭,因此永远不会执行之后的代码await for
。VM 确实注意到该流上也不会有任何新事件,因此不会发生其他任何事情,并且它可以退出。您可以使用以下方法修复错误:
_outgoing.addStream(incoming).whenComplete(() {
_outgoing.close();
});
推荐阅读
- javascript - 如何使用云功能在 Firebase 中获取实时数据库?
- wordpress - 复选框不可用 - 联系表格 7 - Wordpress - MDBootstrap
- swiftui - 我们如何在 Swift UI 中添加“InputAccessoryItem”?
- mysql - 如何处理任何字符集
- python - 使用 python 从 Azure 机器学习服务连接 Azure SQL 数据库时出错
- machine-learning - 这属于哪种机器学习类别?
- django - 如何使用特定列键加入 3 种现有数据库表模型?
- mysql - 将产品的“库存水平”信息保存在数据库中的最佳方法是什么?
- flutter - 如何将值传递给 dart/Flutter 中的文件路径
- java - 如何在 Java 上的 Windows 中启动交互式进程?