【发布时间】:2013-03-05 16:53:49
【问题描述】:
我无法让我的观察者在特定线程上正常工作。
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。
问题是我从价值订阅中一无所获。
现在,如果我将 Thread.Sleep(10) 添加到生成循环中(在 OnNext 之后),它可以正常工作。所以我对自己做错了什么感到困惑,非常感谢您的帮助/建议。
【问题讨论】:
标签: c# system.reactive