RX:当一个主题的RefCount达到0时执行处理

本文关键字:RefCount 达到 0时 处理 执行 一个 RX | 更新日期: 2023-09-27 18:17:50

我有一个简单的类如下:

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());
    }
}

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

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

RX:当一个主题的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());
    }
}