流在流上的侦听器可以随时暂停,该流的来源可以检测并暂停添加项目。 长度可以注意流中的项目数量,但是我不确定如果有成千上万的未读项目会发生什么。
延伸 @randal-schwartz答案 aasync-wait和“等待“循环”将“自动处理”背压:
import 'dart:async';
Stream<int> generateNumbers(int max) async* {
for (int i = 1; i <= max; i++) {
print("Yielded number: $i");
yield i;
}
}
Future<void> processNumbers() async {
// The for-await loop automatically waits for each event.
await for (final number in generateNumbers(5)) {
await Future.delayed(Duration(seconds: 1));
print('Received number: $number');
}
}
Future<void> main() async {
await processNumbers();
}
Yielded number: 1
Received number: 1
Yielded number: 2
Received number: 2
Yielded number: 3
Received number: 3
Yielded number: 4
Received number: 4
Yielded number: 5
Received number: 5
asyncMap
asyncExpand
listen
)。