2012-05-14 86 views
2

这是.Synchronize()需要吗?如果不是,实际上何时需要使用?观察主线程时是否需要同步观察值?

_subject.SubscribeOn(Scheduler.TaskPool).ObserveOn(SynchronizationContext.Current).Synchronize().Subscribe(OnNext) 

我认为这可能是必要的原因是因为我从多个线程调用主题的OnNext。不过,我希望OnNext方法在主线程上执行。

回答

4

Synchronize扩展方法是用于两件事情:

  1. 为了确保观察到的,它被施加到如下所述适当的可观察到的“合同” - 即OnNext*(OnError|OnCompleted)
  2. 确保每个OnNext都是序列化的 - 如果在不同线程上调用,则不重叠。

就你而言,你正在同步到当前的上下文,所以第二点是自动处理的。

+0

谢谢你的帮助。在这种情况下,我是否仍然需要担心你的第一点?在什么情况下会是一个问题? – user981225

+0

@ user981225 - 如果您使用标准Rx运算符,则通常不需要担心第一点。只有当你实施你自己的'IObservable '时,你才会发现你的行为非常糟糕。 – Enigmativity