2012-05-14 116 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