首页 > 解决方案 > 在 Dart 中将单个订阅流拆分为 2 个流

问题描述

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

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

该解决方案是否优化?(在性能或其他方面)。

提前致谢。

标签: dartdart-async

解决方案


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

推荐阅读