flutter 流中的地图不是并发版本

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

我在 Flutter 中使用 Streams。问题是

stream.map()
是并发的,这意味着它不会等待一个操作完全执行。例如:

_sendClientSubject.stream.map((value) async {
      await Future.delayed(const Duration(hours: 1));
      // do some operation
    }).listen((value) {
      // do nothing
    });

在这里,我希望下一个流值等到我完成操作。但实际情况是,map 没有等待一个小时,而是正在处理每个流值

concurrently

我的问题是,如何在 Flutter 中执行

synchronously
操作。

flutter stream
2个回答
0
投票

使用

rxdart
包中的 asyncMap 方法。

_sendClientSubject.stream.delay(const Duration(hours: 1)).asyncMap((value) {
  // do some operation
}).listen((value) {
  // do nothing
});

0
投票

您可以添加同步锁,以确保即使在并发调用的情况下,您的事件也以“同步”方式处理

final lock = Lock(); 
_sendClientSubject.stream.map((value) async {
  await lock.synchronized(() async {
    await Future.delayed(const Duration(hours: 1));
    // do some operation
  });
}).listen((value) {
  // do nothing
});
© www.soinside.com 2019 - 2024. All rights reserved.