user25064 user25064 - 2 months ago 11
C# Question

Get latest message from an IObservable

I have a very simple task that I would like to accomplish with rx and I am not sure how to accomplish it. Consider the code below as minimum example.

var subject = new Subject<int>();

subject.OnNext(1);
subject.OnNext(2);

Assert.AreEqual(2, subject.__________());
// > what goes above <


The method should be something exposed only to the
IObservable
interface. There are two useful looking candidates that do not do what I hope. The
Latest
method will block until the next message which is not the behavior that I am looking for. The
MostRecent
documentation looked very promising but failed to deliver what I hoped for.

Answer

There's no single method that will do it. Observables need a subscription, which can also take the form of an operator, to propagate values. You need that subscription active when the subject emits (or OnNexts) the values. There's nothing that caches or stores the values for you.

Here's an example using a raw subscription:

var subject = new Subject<int>();

int last = 0;

using (subject.Subscribe(i => last = i))
{
    subject.OnNext(1);
    subject.OnNext(2);
}
Assert.AreEqual(2, last);
Comments