当下一个 Observable 可用时停止 Observable
Stopping an Observable when a next is available
我有以下东西:
IObservable<A> as_;
Func<A, IObservable<B>> getbs;
getbs
是 returns 无限可观察 B
s 的函数。
我想得到一个 IObservable<B>
"switches" 到下一个 IObservable<B>
尽快下一个 A
在 "available".
像 as_.SelectMany(getbs)
这样的东西是行不通的,因为它会从第一个 A
开始不断得到 B
s,因为序列永远不会自然终止。
SelectMany
就像 Select
后跟 Merge
。您需要在函数中使用 Select
然后 Switch
.
IObservable<int> a = Observable.Generate(0, _ => true, i => i + 1, i => i, _ => TimeSpan.FromSeconds(1));
Func<int, IObservable<string>> selector = i => Observable.Generate(1, _ => true, j => j + 1, j => $"{i} x {j}", _ => TimeSpan.FromMilliseconds(50));
a.Select(selector).Switch().Subscribe(s => Console.WriteLine(s));
我有以下东西:
IObservable<A> as_;
Func<A, IObservable<B>> getbs;
getbs
是 returns 无限可观察 B
s 的函数。
我想得到一个 IObservable<B>
"switches" 到下一个 IObservable<B>
尽快下一个 A
在 "available".
像 as_.SelectMany(getbs)
这样的东西是行不通的,因为它会从第一个 A
开始不断得到 B
s,因为序列永远不会自然终止。
SelectMany
就像 Select
后跟 Merge
。您需要在函数中使用 Select
然后 Switch
.
IObservable<int> a = Observable.Generate(0, _ => true, i => i + 1, i => i, _ => TimeSpan.FromSeconds(1));
Func<int, IObservable<string>> selector = i => Observable.Generate(1, _ => true, j => j + 1, j => $"{i} x {j}", _ => TimeSpan.FromMilliseconds(50));
a.Select(selector).Switch().Subscribe(s => Console.WriteLine(s));