2012-05-14 10 views
2

이가요? 동기화()가 필요합니까? 그렇지 않다면, 실제로 사용할 필요가있을 때?주 스레드에서 관찰 할 때 관찰 가능 항목을 동기화해야합니까?

_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

관련 문제