我试图理解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
}
答案 0 :(得分:1)
_outgoing.stream
永远不会关闭,因此await for
之后的代码将永远不会执行。 VM确实注意到该流上也不会有任何 new 事件,因此不会发生其他任何事情,并且可以退出。您可以通过以下方式修复该错误:
_outgoing.addStream(incoming).whenComplete(() {
_outgoing.close();
});