来自任务功能和切换可观察的无限IObservable

时间:2016-10-11 18:45:14

标签: c# .net .net-4.5 system.reactive

我有两件事:返回Task<TResult> queryIObservable<bool> toggle的函数。我要创建的是IObservable<TResult>,当toggle获得true时,它会启动一个无限循环,每次调用query并返回其结果。然后,当切换得到false时,它应该停止无限循环。

我确实已经阅读了如何从任务中创建无限循环,但我无法弄清楚如何开启和关闭它toggle。此外,它无法在无限循环中运行query并仅过滤它。如果togglefalse,则根本不应调用查询。此外,如果toggle变为false,那么很好,如果query已经启动,则生成的observable将不会返回。当query为假时取消toggle也可能是个好主意,但这不是必需的。

我希望它可以自动测试。

1 个答案:

答案 0 :(得分:2)

我认为你的确想做什么:

IObservable<TResult> query =
    toggle
        .Select(b => b
            ? Observable
                .Defer(() => Observable.FromAsync(() => SomeFunction()))
                .Repeat()
            : Observable
                .Never<TResult>())
        .Switch();