Skip to content

SubscribeOnSynchronize

1. 概要

SubscribeOnSynchronize は、購読時にロック(lock)で同期化を行うオペレーターです。提供された gate オブジェクトを使用してソースへの購読呼び出しを排他的に制御します。

2. シグネチャ

デフォルト

csharp
public static Observable<T> SubscribeOnSynchronize<T>(
    this Observable<T> source,
    object gate,
    bool rawObserver = false)

指定した gate オブジェクトで lock を取得し、ソースへの購読処理を同期的に実行します。rawObserver は通常 false のまま使います。true にすると observer.Wrap() による中継を省き、下流の Observer<T> を直接使います。詳しい違いは rawObserver を参照してください。

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

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

購読処理がロックにより排他制御され、同時に複数の購読が実行されることを防ぎます。

4. サンプルコード

csharp
var gate = new object();

// gate オブジェクトでロックして購読
observable
    .SubscribeOnSynchronize(gate)
    .Subscribe(x => Console.WriteLine($"値: {x}"));

// 複数の購読を同じ gate で同期
observable
    .SubscribeOnSynchronize(gate)
    .Subscribe(x => ProcessA(x));

observable
    .SubscribeOnSynchronize(gate)
    .Subscribe(x => ProcessB(x));