当下一个 Observable 可用时停止 Observable

Stopping an Observable when a next is available

我有以下东西:

IObservable<A> as_;
Func<A, IObservable<B>> getbs;

getbs 是 returns 无限可观察 Bs 的函数。

我想得到一个 IObservable<B> "switches" 到下一个 IObservable<B> 尽快下一个 A 在 "available".

as_.SelectMany(getbs) 这样的东西是行不通的,因为它会从第一个 A 开始不断得到 Bs,因为序列永远不会自然终止。

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));