我有两件事:返回Task<TResult> query
和IObservable<bool> toggle
的函数。我要创建的是IObservable<TResult>
,当toggle
获得true
时,它会启动一个无限循环,每次调用query
并返回其结果。然后,当切换得到false
时,它应该停止无限循环。
我确实已经阅读了如何从任务中创建无限循环,但我无法弄清楚如何开启和关闭它toggle
。此外,它无法在无限循环中运行query
并仅过滤它。如果toggle
为false
,则根本不应调用查询。此外,如果toggle
变为false,那么很好,如果query
已经启动,则生成的observable将不会返回。当query
为假时取消toggle
也可能是个好主意,但这不是必需的。
我希望它可以自动测试。
答案 0 :(得分:2)
我认为你的确想做什么:
IObservable<TResult> query =
toggle
.Select(b => b
? Observable
.Defer(() => Observable.FromAsync(() => SomeFunction()))
.Repeat()
: Observable
.Never<TResult>())
.Switch();