Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 接收:当对象的参考计数达到0时执行处理_C#_.net_System.reactive_Reactive Programming - Fatal编程技术网

C# 接收:当对象的参考计数达到0时执行处理

C# 接收:当对象的参考计数达到0时执行处理,c#,.net,system.reactive,reactive-programming,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; publi

我有一个简单的类,如下所示:

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());
    }
}
内部类数据提供程序:IDataProvider
{
private readonly Subject _datachangepubject=new System.Reactive.Subjects.Subject();
私有IObservable _dataChangeObservable;
公共IOobservedTachChange()
{
返回_dataChangeObservable??(_dataChangeObservable=_dataChangeSubject.Publish().RefCount());
}
}
上面只是实际类的一个摘录,它还有其他代码要调用
Subject.OnNext()
来通知更改

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

使用RefCount(),当订阅达到0时,序列完成。所以你可以用它来听序列完成。例如:

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());
    }
}
内部类数据提供程序
{
private readonly Subject _datachangepubject=new System.Reactive.Subjects.Subject();
私有IObservable _dataChangeObservable;
公共IOobservedTachChange()
{
返回_dataChangeObservable??
(_dataChangeObservable=_dataChangeSubject.Finally(()=>{/*DoCleanup here*/}).Publish().RefCount());
}
}

dataChangeSubject.Publish().RefCount()返回的是什么?从方法名称来看,它应该返回整数,但从您的用法来看,它似乎返回
IObservable
。是的,
IConnectableObservable.RefCount()
返回
IObservable
。您能介绍一个事件
RefCountChanged
并订阅它吗?我应该在哪里介绍这个事件
RefCount()
由被动扩展提供,我不知道内部订阅ref count何时更改,这正是我需要了解的。