Dart面试题更新 2026-08-05

请解释 Dart 中 Stream 的概念,并阐述它与 Future 在异步编程中的区别。

技术原理方案权衡Dart

考察说明

考察对 Dart 异步编程模型中 Stream 与 Future 差异的理解。

回答思路

  1. 【回答框架 1】Stream 是异步数据序列,可连续多次发出数据事件、错误事件和完成事件,用于处理随时间产生的多个值,如文件读取、网络响应流、用户输入等。Future 只表示一次性异步结果,最终返回单个值或错误。
  2. 【回答框架 2】使用场景:Future 适用于一次性的操作,如发一次 HTTP 请求并等待响应;Stream 适用于持续的数据流,如 WebSocket 消息、定时器事件。Stream 可以通过 listen 订阅,支持取消订阅。
  3. 【回答框架 3】Stream 分为单订阅和广播两种:单订阅流只允许一个订阅者,而广播流允许多个订阅者。处理 Stream 可以使用 await for 或 listen 方法,也可以通过 transform 组合操作。
  4. 【回答框架 4】两者本质上都属于异步 API,但 Future 不可取消,而 Stream 订阅可以取消。数据流基于事件驱动,与 Future 的单一回调不同,Stream 的回调会被多次触发。
  5. 【关键点 1】Stream 是可连续产生多个异步事件的序列。
  6. 【关键点 2】Future 只能产生一个异步结果。
  7. 【关键点 3】Stream 支持订阅与取消,Future 不支持取消。
  8. 【易错点 1】不要将 Stream 等同于 Future,二者适用的异步场景不同。
  9. 【易错点 2】注意区分单订阅流与广播流的订阅限制。