如何创建一个 observable 来指示其他两个 observable 的完成?
How to create an observable that signals the completion of two other observables?
我有两个 IObservable<T>
,我想创建一个 IObservable<Unit>
(或某种 ISingle<Unit>
,如果存在这样的东西),当两个都完成时发出完成信号,没有别的。在 Rx.NET 中执行此操作的惯用方法是什么?
我习惯了 Reactor Core,在这种情况下我会使用 flux1.then().and(flux2.then())
。但我不相信 Rx.NET 提供 then
和 and
运算符。
假设两个序列的类型相同,您可以使用 Merge
运算符。将 IgnoreElements
加入混合可能是有益的,以减少与可能包含大量元素的合并序列相关的同步压力。
IObservable<Unit> completion = sequence1.IgnoreElements()
.Merge(sequence2.IgnoreElements())
.Select(_ => Unit.Default);
如果序列的类型不同,您可以在合并前将它们中的每一个投影到一个 IObservable<Unit>
,或者使用 CombineLatest
而不是 Merge
。很多选择。
我有两个 IObservable<T>
,我想创建一个 IObservable<Unit>
(或某种 ISingle<Unit>
,如果存在这样的东西),当两个都完成时发出完成信号,没有别的。在 Rx.NET 中执行此操作的惯用方法是什么?
我习惯了 Reactor Core,在这种情况下我会使用 flux1.then().and(flux2.then())
。但我不相信 Rx.NET 提供 then
和 and
运算符。
假设两个序列的类型相同,您可以使用 Merge
运算符。将 IgnoreElements
加入混合可能是有益的,以减少与可能包含大量元素的合并序列相关的同步压力。
IObservable<Unit> completion = sequence1.IgnoreElements()
.Merge(sequence2.IgnoreElements())
.Select(_ => Unit.Default);
如果序列的类型不同,您可以在合并前将它们中的每一个投影到一个 IObservable<Unit>
,或者使用 CombineLatest
而不是 Merge
。很多选择。