如何解释这两种广播流创建之间的区别?

问题描述 投票:0回答:1

根据我如何创建广播流/streamController,结果是不一样的。

StreamController.broadcast()

final sc = StreamController.broadcast();
final stream = sc.stream;
print(stream.isBroadcast);
stream.length.then(print);
stream.length.then(print);
sc..add('')..close();
stream.length.then(print);
stream.length.then(print);

我得到输出:

true
c0
d0
a1
b1

StreamController.stream.asBroadcastStream()

final sc = StreamController();
final stream = sc.stream.asBroadcastStream();
print(stream.isBroadcast);
stream.length.then(print);
stream.length.then(print);
sc..add('')..close();
stream.length.then(print);
stream.length.then(print);

我得到输出:

true
a1
b1
c1
d1

如何解释差异?

(我在DartPad SDK 2.0.0上做了这个测试)

stream dart
1个回答
0
投票

显然

asBroadcastStream
仅仅是一种让单个订阅流具有多个侦听器的方法,与实际的广播流相比,在删除事件时,其行为有所不同。真正的广播流(通过
StreamController.broadcast
创建)可以在没有侦听器时安全地删除事件,而单订阅流实际上会缓冲这些事件。

© www.soinside.com 2019 - 2024. All rights reserved.