当前位置: 代码迷 >> 综合 >> 异步编程之 Streams
  详细解决方案

异步编程之 Streams

热度:66   发布时间:2024-02-21 07:29:03.0

继续 Dart 异步系列的第四篇 Stream,Stream 是构成了 Dart 响应式流编程重要组成部分。相比上篇文章中的 Future,每个 Future 代表单一的值,可以异步传送数据或异常。而 Stream 的异步工作方式和 Future 类似,只是 Stream 代表的是一系列的事件,那么就可能传递任意数据值,可能是多个值也可以是异常。比如从磁盘中读取一个文件,那么这里返回的就是一个 Stream。此外 Stream 是基于事件流订阅的机制来运转工作的。

1. 为什么需要 Stream

首先,在 Dart 单线程模型中,要实现异步就需要借助类似 Stream、Future 之类的 API 实现。所以 Stream 可以很好地实现 Dart 的异步编程。

此外,在 Dart 中一些异步场景中,比如磁盘文件、数据库读取等类似需要读取一系列的数据时,这种场景 Future 是不太合适的,所以在一些需要实现一系列异步事件时 Stream 就是不错的选择,Stream 提供一系列异步的数据序列。换个角度理解 Stream 就是一系列的 Future 组合,Future 只能有一个异步响应,而 Stream 就是一系列的异步响应。

//Futures 实现
void main() {Future.delayed(Duration(seconds: 1), () => print('future value is: 1'));
}

输出结果: