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

时间:2016-11-15 02:46:16

标签: c# .net system.reactive reactive-programming

我有一个简单的课程如下:

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,那么我可以处理主题并执行其他一些清理操作。

1 个答案:

答案 0 :(得分:3)

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