当next可用时停止Observable

本文关键字:Observable next | 更新日期: 2023-09-27 18:03:04

我有以下东西:

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

getbs是一个函数,它返回B s的无限可观测值。

我想得到一个IObservable<B>,只要下一个A在"可用",就"切换"到下一个IObservable<B>

as_.SelectMany(getbs)这样的东西将不起作用,因为它将不断从第一个A获得B s,因为序列永远不会自然终止。

当next可用时停止Observable

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