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