请求举例说明Dart中SynchronousStreamController与普通StreamController的差异
StreamController sync参数差异示例
核心区别在于事件触发的时机:
sync: false(默认):调用add后,事件会被放入微任务队列,当前同步代码执行完毕后才会触发监听回调。sync: true:调用add后,事件会立即同步触发监听回调,回调代码会打断当前同步流程先执行。
示例1:sync=false(默认)
void main() { print('Start'); final controller = StreamController(sync: false); controller.stream.listen((data) { print('Listen callback: $data'); }); controller.add('Hello'); print('After add'); controller.close(); }
输出结果:
Start After add Listen callback: Hello
示例2:sync=true
void main() { print('Start'); final controller = StreamController(sync: true); controller.stream.listen((data) { print('Listen callback: $data'); }); controller.add('Hello'); print('After add'); controller.close(); }
输出结果:
Start Listen callback: Hello After add
补充说明
SynchronousStreamController 本质上等价于 StreamController(sync: true),二者行为完全一致。如果之前没看出差异,大概率是示例里没有足够的同步代码来体现微任务延迟的效果,上面的示例通过在add后立即打印,清晰展示了两种模式的执行顺序差异。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

