public static IObservable <T> AsObservable <T>(this INotifyDisposable disposable, Func <T> lastValue = null) { return(Observable.Create <T>(observer => { if (disposable.IsDisposed) { if (lastValue != null) { observer.OnNext(lastValue()); } observer.OnCompleted(); return Disposables.Empty; } var handler = Disposables.Call(() => { if (lastValue != null) { observer.OnNext(lastValue()); } observer.OnCompleted(); }); disposable.Attach(handler, keepAlive: true); return Disposables.Call(() => { disposable.Dettach(handler); }); })); }
public void Dettach(IDisposable child) => _handler.Dettach(child);