RX:订阅开始或处置时执行操作?

时间:2012-03-13 05:17:01

标签: .net system.reactive

我想跟踪我的IObservable的有效订阅数量? 我想我可以通过在“某人”调用Subscribe / Dispose时递增/递减计数器来实现这一点。

我该怎么做? 或者有更好的方法吗?

似乎内部由RefCount完成,但订阅计数器未公开。

由于

2 个答案:

答案 0 :(得分:6)

最简单的方法是将Observable包装在Observable.Create中:

IObservable<string> myObs;

var returnObservable = Observable.Create<string>(subj => {

    // TODO: Write code to do stuff on Sub

    var disp = myObs.Subscribe(subj);

    return Disposable.Create(() => {
        disp.Dispose();

        // TODO: Write code to do stuff in unsub.
    });
});

答案 1 :(得分:4)

谢谢,这就是我所需要的。 这可以变成运算符,如下所示:

public static IObservable<TSource> OnSubscribe<TSource>(this IObservable<TSource> source, Action onSubscribe, Action onDispose)
{
    return
        Observable
            .Create<TSource>(observer =>
            {
                onSubscribe?.Invoke();
                var subscription = source.Subscribe(observer);
                return () =>
                {
                    subscription.Dispose();
                    onDispose?.Invoke();
                };
            });
}