Dot-Net

RX:在訂閱開始或處置時執行操作?

  • February 5, 2019

我想跟踪我的 IObservable 的有效訂閱數量?我想我可以通過每當“某人”呼叫訂閱/處置時遞增/遞減計數器來實現這一點。

我怎樣才能做到這一點 ?或者有更好的方法嗎?

它似乎是由 RefCount 在內部完成的,但訂閱計數器沒有公開。

謝謝

最簡單的方法是將 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.
   });
});

謝謝,這正是我所需要的。這可以變成一個運算符,如下所示:

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

引用自:https://stackoverflow.com/questions/9678729