异步编程之Stream
Stream是一序列异步事件。
接受流事件
Future<int> sumStream(Stream<int> stream) async {
var sum = 0;
await for (var value in stream) {
sum += value;
}
return sum;
}使用async*函数来生成一个int数据流:
import 'dart:async';
Future<int> sumStream(Stream<int> stream) async {
var sum = 0;
await for (var value in stream) {
sum += value;
}
return sum;
}
Stream<int> countStream(int to) async* {
for (int i = 1; i <= to; i++) {
yield i;
}
}
main() async {
var stream = countStream(10);
var sum = await sumStream(stream);
print(sum); // 55
}两种流
单订阅者流
事件需要以正确的顺序分发,并且不允许丢失。比如读文件或请求网页,都属于这种流。这种流只能被监听一次,后面监听的意味着丢失最初的事件,那么剩下的事件就没意义了。
广播流
这种流可以任意时间都被处理的。比如,网页上的鼠标操作可以是这种流。
处理Stream的方法
修改Stream的方法
转换函数
transform()类似于map()
listen()方法
为了创建一个新的Stream类型,你可以扩展Stream类,并且实现listen()方法,Stream其他方法都是调用listen()方法的。
Last updated