2

これは .Synchronize() が必要ですか? そうでない場合、実際に使用する必要があるのはいつですか?

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

これが必要かもしれないと思った理由は、サブジェクトの OnNext を複数のスレッドから呼び出しているからです。ただし、メイン スレッドで OnNext メソッドを実行する必要があります。

4

1 に答える 1

4

Synchronize拡張メソッドは、次の 2 つの目的で使用されます。

  1. それが適用されるオブザーバブルが適切なオブザーバブル「コントラクト」に従うことを保証するためOnNext*(OnError|OnCompleted)
  2. それぞれが確実にOnNextシリアライズされるように - 異なるスレッドで呼び出された場合に重複しないようにします。

ただし、あなたの場合、現在のコンテキストに同期しているため、2 番目のポイントは自動的に処理されます。

于 2012-05-15T00:28:55.387 に答える