質問: subject.ObserveOn(Scheduler.TaskPool).Subscribe(value => { //use value }); ``` 作業がTaskPoolに入れられ、現在のスレッドをブロックしない限り、Observableから出てくる値を処理するスレッドは本当に気にしません。しかし、私のOnNextデリゲート内での 'value'の使用は、スレッドセーフではありません。現時点でObservableを介して多くの値が渡っている場合、私はOnNextハンドラへの呼び出しが重複しています。 私はOnNextデリゲートにロックを追加することができますが、それはRxのやり方のようには感じられません。 `subject.OnNext(value);` を呼び出す複数のスレッドがあるときに、一度に1つのOnNextハンドラを呼び出すようにするにはどうすればよいでしょうか?
回答: MSDNでの件名の使用 > デフォルトでは、サブジェクトは > スレッド。 [...]しかし、あなたがしたい場合 > スケジューラを使用して発信者をオブザーバに同期させると、 > これを行うにはSynchronizeメソッドを使用します。 > > だから、Brandonがコメントで言うように、主題を同期させて、それをあなたのプロデューサースレッドに渡すべきです。例えば ``` var syncSubject = Subject.Synchronize(subject); // syncSubject.OnNext(value) can be used from multiple threads subscription = syncSubject.ObserveOn(TaskPoolScheduler.Default).Subscribe(value => { //use value }); ```