我有一个用户交互场景,我想用 Rx 来处理。
该场景类似于经典的“当用户停止输入时,执行一些操作”(通常是搜索到目前为止用户已键入的内容) (1) - 但我还需要:
然后,我使用
这给了我一个
要实现 (2),我最终应用了
那么 (3) 怎么办? 取消待处理任务?
如果我理解正确,每当出现新的内部
也许可以将其与触发取消任务的方法连接在一起?
该场景类似于经典的“当用户停止输入时,执行一些操作”(通常是搜索到目前为止用户已键入的内容) (1) - 但我还需要:
- (2) 仅获取“执行某些操作”单元的最新结果(见下文)
- (3) 当启动新的工作单元时,取消正在进行中的任何工作(在我的情况下,这需要CPU密集型操作)
IObservable
监听用户事件,并使用 .Throttle()
做节流处理,以便仅在事件之间的暂停期间触发(“用户停止输入”)。然后,我使用
.Select(_ => CreateMyTask(...).ToObservable())
。这给了我一个
IObservable<IObservable<T>>
,其中每个内部可观察对象包装了一个单独的任务。要实现 (2),我最终应用了
.Switch()
,以仅获取最新工作单元的结果。那么 (3) 怎么办? 取消待处理任务?
如果我理解正确,每当出现新的内部
IObservable<T>
时,.Switch()
方法就会订阅它并从先前的一个(或多个)中取消订阅,从而导致它们被 Dispose()
。也许可以将其与触发取消任务的方法连接在一起?
ToObservable()
运算符更可取。 - Lee Campbell