我怎么知道两个Streams何时完成?

时间:2013-10-11 18:58:35

标签: dart dart-async

我正在使用Dart的Streams进行异步事件。我有两个流,我想知道两个流何时完成(也就是关闭)。我想用Futures做这件事。我该怎么做?

1 个答案:

答案 0 :(得分:7)

StreamSubscription可以使用asFuture返回Future。当流关闭时,订阅的未来就完成了。

使用Future.wait等待两个流'期货要完成。

以下是一个例子:

import 'dart:async';

Future listenOnTwoStreams(Stream s1, Stream s2) {
  StreamSubscription sub1 = s1.listen((e) => print(e));
  StreamSubscription sub2 = s2.listen((e) => print(e));

  Future f1 = sub1.asFuture();
  Future f2 = sub2.asFuture();

  return Future.wait([f1, f2]).then((e) => print("all done!"));
}

void main() {
  StreamController controller1 = new StreamController();
  StreamController controller2 = new StreamController();

  Stream s1 = controller1.stream;
  Stream s2 = controller2.stream;

  listenOnTwoStreams(s1, s2);

  Timer.run(() {
    controller1.add("1");
    controller2.add("2");

    controller1.close();
    controller2.close();
  });
}