【问题标题】:What is the difference between using Sink and Pipe with Streams in Dart?在 Dart 中使用 Sink 和 Pipe 与 Streams 有什么区别?
【发布时间】:2019-08-02 11:09:21
【问题描述】:
import "dart:async";
import "dart:html";

void main() async {
  InputElement addStream = querySelector("#addstream");

  Stream<int> aStream = _someStream();
  StreamController<int> sc = StreamController();

  sc.stream.listen((e) => print(e));

  addStream.onClick.listen((e) {
  sc.sink.addStream(aStream);  // streamcontroller brings in stream through the sink
  // aStream.pipe(sc);   // stream going into streamcontroller through the sink
  });
}

在上面的代码中,sc.sink.addStream(aStream) 似乎是使用 sink 方法将aStream 添加到StreamController sc。 在此之下,aStream 使用pipe 被添加到StreamController sc

这两种方法似乎都做同样的事情。在我看来,使用一种方法而不是另一种方法只是风格。如果您使用的是Stream,则pipe 将其转至StreamController。如果您使用的是StreamController,请将Stream 沉入其中。使用一个与另一个有什么特别的原因吗?

【问题讨论】:

  • 请注意sc.sinksc 相同。所以sc.sink.addStream(aStream)sc.addStream(aStream);是一样的

标签: dart stream pipe sink


【解决方案1】:

aStream.pipe(sc) 将在流完成后 close() 流控制器。使用sc.addStream(aStream),流完成后控制器仍将打开,因此您可以添加更多事件或其他流。

在这种情况下对Stream.pipe 的调用与sc.addStream(aStream).then((_) sc.close()); 相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2013-08-09
    • 2019-03-18
    • 2020-08-16
    • 2021-12-17
    相关资源
    最近更新 更多