如何在飞镖流上设置背压。 (或 rxDart)

How to set backpressure on dart stream. (or rxDart)

有没有办法在飞镖流上设置背压?

我想实现这样的功能:

  1. 用户按下按钮。
  2. 向 PublishSubject 添加数据。
  3. 即使在处理添加的数据时添加了其他数据,也会被忽略。

我不知道怎么做。

有什么好的方法吗?

Dart Stream 有 built-in 背压(缓冲)。

Stream.periodic(const Duration(milliseconds: 100), (i) => i)
  .take(5)
  .listen((v) async {
    await Future<void>.delayed(const Duration(milliseconds: 500));
    print(v);
  });

await Future<void>.delayed(const Duration(seconds: 10));

// will print 0, 1, 2, 3, 4

您可以使用 exhaustMaprxdart 到 ignore/drop 个值。


Stream.periodic(const Duration(milliseconds: 100), (i) => i)
  .take(5)
  .exhaustMap((v) => Rx.timer(v, const Duration(milliseconds: 500)))
  .listen(print);

await Future<void>.delayed(const Duration(seconds: 10));

// will print 0