Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当下一个可用时停止可观察的_C#_System.reactive - Fatal编程技术网

C# 当下一个可用时停止可观察的

C# 当下一个可用时停止可观察的,c#,system.reactive,C#,System.reactive,我有以下几件事: IObservable<A> as_; Func<A, IObservable<B>> getbs; i可视为; Func-getbs; getbs是一个返回Bs的infinte可观测值的函数 我想获得一个IObservable,一旦as中的下一个A可用,它就会“切换”到下一个IObservable 像as_uu.SelectMany(getbs)这样的东西是行不通的,因为它会从第一个A开始不断地得到Bs,因为序列永远不会自然终止。Sel

我有以下几件事:

IObservable<A> as_;
Func<A, IObservable<B>> getbs;
i可视为;
Func-getbs;
getbs
是一个返回
B
s的infinte可观测值的函数

我想获得一个
IObservable
,一旦as中的下一个
A
可用,它就会“切换”到下一个
IObservable


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

SelectMany
就像是一个
Select
然后是一个
Merge
。然后,您需要在功能中使用
选择

IObservable a=Observable.Generate(0,=>true,i=>i+1,i=>i,=>TimeSpan.FromSeconds(1));
Func selector=i=>Observable.Generate(1,=>true,j=>j+1,j=>$“{i}x{j}”,_=>TimeSpan.frommilluses(50));
a、 选择(选择器).Switch().Subscribe(s=>Console.WriteLine);

其他语言rx实现有一个名为FlatMapLatest的函数。我想知道为什么.net版本中没有它。发布有效的C#.Fixed@Enigmativity会非常有帮助
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));