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

请求举例说明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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:15:57