在Dart中将单个订阅流拆分为2个Steam

时间:2019-02-07 21:16:03

标签: dart dart-async

我有一条消息流:有些是请求,另一些是响应。 我想从我的源创建2个流。

_responseStream = _sourceStream.transform(decoder).where((message) => message.isResponse());
_requestStream = _sourceStream.transform(decoder).where((message) => message.isRequest());

此解决方案是否已优化? (从性能或其他方面来讲)。

谢谢。

1 个答案:

答案 0 :(得分:1)

https://pub.dartlang.org/packages/async包含允许执行此操作的StreamSplitter

final multiStream = StreamSplitter(_sourcStream.transform(decoder));
_responseStream = _multiStream.split().where((message) => message.isResponse());
_requestStream = _multiStream.split().where((message) => message.isRequest());
multiStream.close();

 final streams = StreamSplitter.splitFrom(_sourcStream.transform(decoder), 2); // 2 is the default and can be omitted