Table of Contents

Class CombineLatest

Namespace
Bonsai.Reactive
Assembly
Bonsai.Core.dll

Represents an operator that combines values from the source sequences whenever any of the sequences produces an element.

Marble diagram

CombineLatest combines the values from each sequence which are closest in time. Whenever any of the source sequences emits a value (as long as all source sequences have emitted at least one value), CombineLatest takes the most recently emitted values from all other sequences and creates the combined result. CombineLatest will continue to emit values as long as at least one source sequence remains active (i.e. without terminating).

Examples

Use CombineLatest to combine multiple sources in time.

CombineLatest Example

Warning

As CombineLatest emits a combined value whenever any of the source sequences emits a new value, the number of values emitted by CombineLatest is approximately the sum of the number of values in each sequence. If you want to use only one of the source sequences as a master driver and discard redundant values, consider using Sample.

CombineLatest Example with Sample

Video Synchronization

Use CombineLatest to combine multiple sources (e.g. frames from different cameras).

CombineLatest Application Synchronize Video

Note

This example requires the Bonsai.Dsp, Bonsai.Vision and Bonsai.Vision.Design packages to be installed.

Alternative

Use WithLatestFrom if you only need to combine two sources and want to discard redundant values.

Higher-order operator

CombineLatest also works as a higher-order operator, so it can take as input a sequence of observable sequences. In this case, it will subscribe to each of the source sequences and start collecting all the latest values from each sequence. As soon as the outer sequence terminates, it will start reactively combining the latest values whenever any sequence changes, just as in the case of using CombineLatest with a fixed number of inputs.

Higher order

[Combinator]
public class CombineLatest
Inheritance
CombineLatest
Inherited Members

Methods

Process<TSource>(IObservable<IObservable<TSource>>)

Merges elements from all inner observable sequences into one observable sequence by emitting a list with the elements of each sequence whenever any of the sequences produces a notification.

Process<TSource>(IObservable<TSource>, IObservable<TSource>, params IObservable<TSource>[])

Merges the specified sources into one observable sequence by emitting a list with the latest source elements whenever any of the observable sequences produces a notification.

Process<TSource1, TSource2>(IObservable<TSource1>, IObservable<TSource2>)

Merges the specified sources into one observable sequence by emitting a pair with the latest source elements whenever any of the observable sequences produces a notification.

Process<TSource1, TSource2, TSource3>(IObservable<TSource1>, IObservable<TSource2>, IObservable<TSource3>)

Merges the specified sources into one observable sequence by emitting a triple with the latest source elements whenever any of the observable sequences produces a notification.

Process<TSource1, TSource2, TSource3, TSource4>(IObservable<TSource1>, IObservable<TSource2>, IObservable<TSource3>, IObservable<TSource4>)

Merges the specified sources into one observable sequence by emitting a quadruple with the latest source elements whenever any of the observable sequences produces a notification.

Process<TSource1, TSource2, TSource3, TSource4, TSource5>(IObservable<TSource1>, IObservable<TSource2>, IObservable<TSource3>, IObservable<TSource4>, IObservable<TSource5>)

Merges the specified sources into one observable sequence by emitting a quintuple with the latest source elements whenever any of the observable sequences produces a notification.

Process<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6>(IObservable<TSource1>, IObservable<TSource2>, IObservable<TSource3>, IObservable<TSource4>, IObservable<TSource5>, IObservable<TSource6>)

Merges the specified sources into one observable sequence by emitting a sextuple with the latest source elements whenever any of the observable sequences produces a notification.

Process<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7>(IObservable<TSource1>, IObservable<TSource2>, IObservable<TSource3>, IObservable<TSource4>, IObservable<TSource5>, IObservable<TSource6>, IObservable<TSource7>)

Merges the specified sources into one observable sequence by emitting a septuple with the latest source elements whenever any of the observable sequences produces a notification.