特定のスレッドでオブザーバーを適切に動作させるのに問題があります。
Subject<bool> subjEvent = new Subject<bool>();
Subject<int> subjValue = new Subject<int>();
IScheduler sched = new EventLoopScheduler(ts => new Thread(ts));
subjEvent.ObserveOn(sched).Subscribe(
    r =>
        {
            if(r)
            {
                Console.WriteLine("Connected On: \t{0}", Thread.CurrentThread.ManagedThreadId);
                subjValue.ObserveOn(sched).Subscribe(
                    x => Console.WriteLine("Recieved On: \t{0}", Thread.CurrentThread.ManagedThreadId));
            }else{
                Console.WriteLine("Disconnect On: \t{0}", Thread.CurrentThread.ManagedThreadId);
            }
        }
    );
subjEvent.OnNext(true);
for(int i=0; i< 10; i++)
{
    subjValue.OnNext(i);
}
subjEvent.OnNext(false);
subjValue.OnCompleted();
subjEvent.OnCompleted();
アイデアは、何かが利用可能になったときにサブスクライブし、その後のイベントでサブスクライブを解除/再サブスクライブすることです。特定の (同じ読み取り) スレッドを監視し、正しい順序を確保する必要があるため、EventLoopScheduler を用意しました。
問題は、値のサブスクリプションから何も得られないことです。
ここで、生成ループ (OnNext の後) に Thread.Sleep(10) を追加すると、完全に正常に動作します。だから私は自分が間違っていることにちょっと当惑しており、助けやアドバイスをくれてとても感謝しています。