gpt4 book ai didi

Dart 程序在没有执行最后一条语句的情况下退出

转载 作者:行者123 更新时间:2023-12-01 06:32:13 25 4
gpt4 key购买 nike

我正在尝试理解 Streams 并编写了一些代码。一切似乎都正常,程序以状态代码 0 退出。但是它不会打印“loop done”和“main done”字符串。我不知道为什么。

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();
});

关于Dart 程序在没有执行最后一条语句的情况下退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56169492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com