观察主线程时是否需要同步观察值?
问题描述:
这是.Synchronize()需要吗?如果不是,实际上何时需要使用?观察主线程时是否需要同步观察值?
_subject.SubscribeOn(Scheduler.TaskPool).ObserveOn(SynchronizationContext.Current).Synchronize().Subscribe(OnNext)
我认为这可能是必要的原因是因为我从多个线程调用主题的OnNext。不过,我希望OnNext方法在主线程上执行。
答
的Synchronize
扩展方法是用于两件事情:
- 为了确保观察到的,它被施加到如下所述适当的可观察到的“合同” - 即
OnNext*(OnError|OnCompleted)
。 - 确保每个
OnNext
都是序列化的 - 如果在不同线程上调用,则不重叠。
就你而言,你正在同步到当前的上下文,所以第二点是自动处理的。
谢谢你的帮助。在这种情况下,我是否仍然需要担心你的第一点?在什么情况下会是一个问题? – user981225
@ user981225 - 如果您使用标准Rx运算符,则通常不需要担心第一点。只有当你实施你自己的'IObservable'时,你才会发现你的行为非常糟糕。 –
Enigmativity