Sometimes, especially when dealing with integration scenarios, there is a need for correlating multiple events that don't always came together. This is the case of a header file that came together with multiple body files.
In reactive programming, correlating events means correlating multiple observable
messages into a single message that is the result of two or more original messages. Such messages must be somehow correlated to a value (an ID
, serial
, or metadata) that defines that such initial messages belong to the same correlation set.
Useful features in real-world correlators are the ability to specify a timeout (that may be infinite too) in the correlation waiting logic and the ability to specify a correlation message count (infinite too).
Here's a correlator
implementation made for the previous example based on the FileSystemWatcher
class:
public sealed class FileNameMessageCorrelator : IObservable<string>, IObserver<string>, IDisposable { ...