如果观察者很忙,如何删除新元素?

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

我有一个可观察的元素,它定期发出元素。在这些元素上,我执行一种快速和一种缓慢的操作。我想要的是在忙时为慢速观察者添加新元素。有什么方法可以用Rx实现此目的,而不是将标志保留在慢速操作中吗?

我在Reactive扩展程序中是非常新的,如果我的假设有任何问题,请更正我。

let tick = Observable<Int>.interval(.seconds(1), 
            scheduler: SerialDispatchQueueScheduler(qos: .background)).share()

tick.subscribe {
    print("fast observer \($0)")
}.disposed(by: disposeBag)

// observing in another queue so that it does not block the source
tick.observeOn(SerialDispatchQueueScheduler(qos: .background))
    .subscribe {
        print("slow observer \($0)")
        sleep(3) // cpu-intensive task
    }.disposed(by: disposeBag)

swift reactive-programming rx-swift
1个回答
0
投票

恐怕没有一个简单的解决方案。您描述的问题与背压有关,不幸的是,RxSwift不为此提供支持(Apple Combine提供)。通常,您将必须使用以下过滤运算符之一来手动处理这种情况:debouncethrottlefilter。通过使用debouncethrottle,您将需要知道操作的确切持续时间,而实际情况可能并非总是如此。如您所说,使用filter,可以在开始长时间运行的操作之前检查设置的标志。

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