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

发布于 2025-01-19 10:21:51 字数 167 浏览 5 评论 0原文

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

我想实现这样的功能:

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

我不知道该怎么做。

有什么好办法吗?

Is there a way to set backpressure on a dart stream?

I want to implement a function like this:

  1. The user presses a button.
  2. Add data to PublishSubject.
  3. Even if other data is added while the added data is being processed, it is ignored.

I don't know how to this it.

Any good way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陈独秀 2025-01-26 10:21:51

DART流具有内置的背压(缓冲)。

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

您可以使用dyailmap rxdart忽略/删除值。


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

Dart Stream has built-in backpressure (buffered).

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

You can use exhaustMap of rxdart to ignore/drop values.


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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文