我有以下东西:
IObservable<A> as_;
Func<A, IObservable<B>> getbs;
getbs
是一个函数,它返回B
s的无限可观测值。
我想得到一个IObservable<B>
,只要下一个A
在"可用",就"切换"到下一个IObservable<B>
。
像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));