在 Dart 中使用 Sink 和 Pipe 与 Streams 有什么区别?

rch*_*hkm 2 pipe stream dart sink

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
  });
}
Run Code Online (Sandbox Code Playgroud)

上面的代码中,sc.sink.addStream(aStream)好像是用sink方法添加aStreamStreamControllersc。在此之下,aStream用于pipe添加到StreamController sc.

这两种方法似乎都在做同样的事情。在我看来,使用一种方法而不是另一种方法就是一种风格。如果您使用的是Streampipe则将其添加到StreamController. 如果您正在使用 a StreamController,请将 a下沉Stream到它。使用一个与另一个有什么特殊的理由吗?

Nat*_*sch 5

aStream.pipe(sc)close()该流之后流控制器结束。随着sc.addStream(aStream)控制器仍然是开放的流完成后,这样你就可以添加更多的事件或其他流。

Stream.pipe在这种情况下,调用将与sc.addStream(aStream).then((_) sc.close());