在 Dart 中使用 Sink 和 Pipe with Streams 有什么区别?
What is the difference between using Sink and Pipe with Streams in Dart?
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
沉入其中。使用其中一个与另一个相比是否有特殊原因?
aStream.pipe(sc)
将在流结束后 close()
流控制器。使用 sc.addStream(aStream)
流完成后控制器仍将打开,因此您可以添加更多事件或其他流。
在这种情况下对 Stream.pipe
的调用与 sc.addStream(aStream).then((_) sc.close());
相同
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
沉入其中。使用其中一个与另一个相比是否有特殊原因?
aStream.pipe(sc)
将在流结束后 close()
流控制器。使用 sc.addStream(aStream)
流完成后控制器仍将打开,因此您可以添加更多事件或其他流。
在这种情况下对 Stream.pipe
的调用与 sc.addStream(aStream).then((_) sc.close());