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());
}
}
我有一个简单的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());
}
}