来自任务函数的无限 IObservable 和切换可观察

Infinite IObservable from Task function and toggle observable

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

我读过如何从任务中创建无限循环,但我不知道如何 toggle 打开和关闭它。此外,它不能在无限循环中 运行 和 query 并仅对其进行过滤。如果 togglefalse,它根本不应该调用查询。此外,如果 toggle 变为 false,那么如果 query 已经启动,则生成的 observable 将不会 return。当 toggle 为 false 时取消 query 可能也是个好主意,但这不是必需的。

而且我希望它可以自动测试。

我认为完全符合您的要求:

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