来自任务函数的无限 IObservable 和切换可观察
Infinite IObservable from Task function and toggle observable
我有两件事:returns Task<TResult> query
和 IObservable<bool> toggle
的函数。我想要创建的是 IObservable<TResult>
,当 toggle
得到 true
时,它开始一个无限循环,每次调用 query
并且 return 是结果。然后,当切换得到 false
时,它应该停止无限循环。
我读过如何从任务中创建无限循环,但我不知道如何 toggle
打开和关闭它。此外,它不能在无限循环中 运行 和 query
并仅对其进行过滤。如果 toggle
是 false
,它根本不应该调用查询。此外,如果 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();
我有两件事:returns Task<TResult> query
和 IObservable<bool> toggle
的函数。我想要创建的是 IObservable<TResult>
,当 toggle
得到 true
时,它开始一个无限循环,每次调用 query
并且 return 是结果。然后,当切换得到 false
时,它应该停止无限循环。
我读过如何从任务中创建无限循环,但我不知道如何 toggle
打开和关闭它。此外,它不能在无限循环中 运行 和 query
并仅对其进行过滤。如果 toggle
是 false
,它根本不应该调用查询。此外,如果 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();