Skip to content

RefCount

1. 概要

RefCount は、ConnectableObservable を通常の Observable に変換し、購読者の参照カウントに基づいて自動的に Connect() と切断を管理するオペレーターです。最初の購読者が購読したときに自動的に Connect() を呼び出し、最後の購読者が購読を解除したときに接続を破棄します。

2. シグネチャ

デフォルト

csharp
public static Observable<T> RefCount<T>(
    this ConnectableObservable<T> source)

ConnectableObservable を通常の Observable<T> に変換し、購読者の参照カウントによって接続のライフタイムを自動管理します。

3. マーブルダイアグラム

RefCount のマーブルダイアグラム

最初の購読者が購読するとソースに自動接続され、最後の購読者が解除されると接続が自動的に破棄されます。

4. サンプルコード

csharp
// Publish + RefCount(Share と同等)
var shared = observable.Publish().RefCount();

var sub1 = shared.Subscribe(x => Console.WriteLine($"購読者1: {x}"));
// → 最初の購読者なのでソースに自動接続

var sub2 = shared.Subscribe(x => Console.WriteLine($"購読者2: {x}"));
// → 参照カウント: 2

sub1.Dispose();
// → 参照カウント: 1(まだ接続中)

sub2.Dispose();
// → 参照カウント: 0 → ソースの接続を自動破棄

// Replay + RefCount(過去の値を再生しつつ自動管理)
var autoReplay = observable.Replay(bufferSize: 1).RefCount();