如何创建一个 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 提供 thenand 运算符。

假设两个序列的类型相同,您可以使用 Merge 运算符。将 IgnoreElements 加入混合可能是有益的,以减少与可能包含大量元素的合并序列相关的同步压力。

IObservable<Unit> completion = sequence1.IgnoreElements()
    .Merge(sequence2.IgnoreElements())
    .Select(_ => Unit.Default);

如果序列的类型不同,您可以在合并前将它们中的每一个投影到一个 IObservable<Unit>,或者使用 CombineLatest 而不是 Merge。很多选择。