I have to ensure an Observable to complete. It is observing stream data, which isn't in my focus to modify. The stream data may not tick at all. I came across using a subject member that I can use to manually complete the observable.
private readonly Subject<bool> _mySubject = new Subject<bool>();
// relevant property that should be completed
public IObservable<myModel> StreamObservable { get; private set; }
IObservable<myModel> someDataObservable = ... ; // may not tick in scenario
// this doesn't work
StreamObservable = someDataObservable
.TakeUntil(_mySubject)
.Finally(() => logger.LogInformation("completed!"));
_mySubject.OnNext(true);
// I tried Amb.. still not going into Finally(), also when someDataObservable doesn't tick
StreamObservable = Observable.Amb(_mySubject.SelectMany(value => Observable.Empty<myModel>()), someDataObservable)
.Finally(() => logger.LogInformation("completed!"));
_mySubject.OnNext(true);
How can I complete, preferably using Subject.OnNext() ?
The subject trigger is just an idea. My preference is to stay in the observale world and transform the sequence to Observable.Empty(), e.g. when a callback like this is invoked:
private Task<bool> FinishStreamCallback()
{
_mySubject.OnNext(true); // my first approach
return Task.FromResult(true);
}
..targeting using OnCompleted()-subscriptions of the relevant public observable in another class.