1分钟
07 广播和非广播
在 Stream
中又非为广播和非广播模式,如果是广播模式中,StreamControlle
的实现是由如下所示实现的,他们的基础关系如下图所示:
_SyncBroadcastStreamController
_AsyncBroadcastStreamController
广播和非广播的区别在于调用 _createSubscription
时,内部对接口类 _StreamControllerLifecycle
的实现,同时它们的差异在于:
- 在
_StreamController
里判断了如果Stream
是_isInitialState
的,也就是订阅过的,就直接报错 "Stream has already been listened to." ,只有未订阅的才创建StreamSubscription
。 - 在
_BroadcastStreamController
中,_isInitialState
的判断被去掉了,取而代之的是isClosed
判断,并且在广播中,_sendData
是一个forEach
执行:
_forEachListener((_BufferingStreamSubscription<T> subscription) {
subscription._add(data);
});
学员评价