c# - RX : Perform disposal when RefCount of a Subject reaches 0

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

最佳答案

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

关于c# - RX : Perform disposal when RefCount of a Subject reaches 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40601183/

相关文章:

c# - 如何从 C# 中删除 IIS 对象?

c# - ReplaySubject.First() 意外阻塞

silverlight - ReactiveUI:将 CanExecute 与 ReactiveCommand 结合使用

c# - 如何知道 guest 用户是否正在运行应用程序 - C#?

c# - WCF REST 服务的 Azure 缓存间歇性响应时间

c# - Builder 与 Facade 设计模式

python - 在 Python 中使用 Microsoft.Office.Interop.Excel 和 CLR 打印 Excel 文件?

system.reactive - 如何使用 ReactiveUI 和 DynamicData 将可变模型的 ObservableCollection<T> 绑定(bind)到 View 模型的 ReadOnlyObservableCollection<T>

c# - 使用 C# Express 版本的 Compact Framework 开发

c# - Swagger 找不到 ApiVersion ed 的操作