我有一个简单的课程如下:
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,那么我可以处理主题并执行其他一些清理操作。
答案 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());
}
}