You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用StreamController.add后调用addError出现异常的问题求助

问题原因与解决方法

你遇到的问题根源在于默认的StreamController是单订阅流。单订阅流的核心特性是:一旦流触发错误事件,整个流会直接进入终止状态,后续再调用add或addError都会抛出异常。这就是第三个Future报错时控制器崩溃的原因——第一个错误已经让单订阅流终止,后续的add(1)和第二个addError全是无效操作。

解决方法

把创建StreamController的代码替换为广播控制器即可,广播流支持多次发送数据和错误事件,不会因单次错误终止:

StreamController<int> c = StreamController.broadcast();

修改后你的测试用例会完全符合预期:先接收第一个Exception错误,接着收到成功返回的1,最后接收第二个Exception错误。

如果业务场景必须保留单订阅特性,也可以在每次流终止后重新创建控制器,但显然广播控制器更适配这种需要多次转发错误和数据的场景。

内容的提问来源于stack exchange,提问作者hace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:27:10