我在 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
操作。
使用
rxdart包中的
asyncMap
方法。
_sendClientSubject.stream.delay(const Duration(hours: 1)).asyncMap((value) {
// do some operation
}).listen((value) {
// do nothing
});
您可以添加同步锁,以确保即使在并发调用的情况下,您的事件也以“同步”方式处理
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
});