首页 > 解决方案 > 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
}

标签: dartstream

解决方案


_outgoing.stream永远不会关闭,因此永远不会执行之后的代码await for。VM 确实注意到该流上也不会有任何事件,因此不会发生其他任何事情,并且它可以退出。您可以使用以下方法修复错误:

_outgoing.addStream(incoming).whenComplete(() {
    _outgoing.close();
});

推荐阅读