gpt4 book ai didi

stream - 为什么这个 Dart 广播流不接受多个监听调用

转载 作者:行者123 更新时间:2023-12-04 18:44:59 24 4
gpt4 key购买 nike

import 'dart:async';

void main() {
var dog = Dog();
showTheDogACat(dog);
print('outside');
dog.bark();
}

class Cat{
void runAway(msg){
print("$msg I'm running away!");
}
}

class Dog{
var _barkController = StreamController();
Stream get onBark => _barkController.stream.asBroadcastStream();
void bark(){
_barkController.add("woof");
}
}

showTheDogACat(dog){
var cat = Cat();
dog.onBark.listen((event)=>cat.runAway(event));
dog.onBark.listen((event)=>print(event)); //why Exception: Stream already has subscriber?
print('inside');
dog.bark();
}
为什么第二个 dog.onBark.listen调用生成异常:流已经有订阅者?我认为广播流可能有很多订阅者?

最佳答案

setter/getter onBark调用 asBroadcastStream第二次访问 _barkController.stream .新创建的广播流将尝试绑定(bind)到 _barkController.stream但会失败,因为已经有一个监听器。

所以是的:广播流可能有多个监听器,但是 asBroadcastStream不得在单个订阅流上多次调用方法。

一种解决方案是缓存第一个 asBroadcastStream 的结果。 .

关于stream - 为什么这个 Dart 广播流不接受多个监听调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16491069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com