RX:当一个Subject的RefCount为0时进行处置

RX: Perform disposal when RefCount of a Subject reaches 0

我有一个简单的class如下:

internal class DataProvider : IDataProvider
{
    private readonly Subject<string> _dataChangeSubject = new System.Reactive.Subjects.Subject<string>();
    private IObservable<string> _dataChangeObservable;

    public IObservable ObserveDataChange()
    {
        return _dataChangeObservable ?? (_dataChangeObservable = _dataChangeSubject.Publish().RefCount());
    }
}

以上只是实际 class 的摘录,其中还有其他代码可以调用 Subject.OnNext() 来通知更改。

我想知道是否有办法知道已发布主题的 RefCount 何时达到 0,以便我可以处理该主题并执行一些其他清理操作。

使用 RefCount(),当订阅数达到 0 时序列完成。因此您可以只使用 Finally 来监听序列完成。例如:

internal class DataProvider
{
    private readonly Subject<string> _dataChangeSubject = new System.Reactive.Subjects.Subject<string>();
    private IObservable<string> _dataChangeObservable;

    public IObservable<string> ObserveDataChange()
    {
        return _dataChangeObservable ?? 
            (_dataChangeObservable = _dataChangeSubject.Finally(() => { /* Do cleanup here */ }).Publish().RefCount());
    }
}