飞镖流如何处理背压和部分数据? 我学习飞镖,并试图在TCP之上实现相当简单的协议。 首先,我找不到与飞镖流中的背压有关的任何信息。 Google只是显示rxdart,但是...

问题描述 投票:0回答:2

流在流上的侦听器可以随时暂停,该流的来源可以检测并暂停添加项目。 长度可以注意流中的项目数量,但是我不确定如果有成千上万的未读项目会发生什么。

延伸 @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(); }

dart tcp stream network-programming
2个回答
3
投票

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


0
投票

asyncMap

不会自动“处理”背压。它非常低级别,可用于制造一个侦听器,该侦听器在订阅上使用Randal提到的订单上“处理”背压。 我将“手柄”放在引号中,因为它实际上是处理背压的发射极。订户实际上创建了背压(使用

asyncExpand

listen
)。

© www.soinside.com 2019 - 2025. All rights reserved.