RX Subjectを使用すると、OnNext()
を複数のスレッドから呼び出すことはスレッドセーフですか?リアクティブエクステンションOnNext
したがって、複数のソースからシーケンスを生成することができます。
同じことをマージしますか?
RX Subjectを使用すると、OnNext()
を複数のスレッドから呼び出すことはスレッドセーフですか?リアクティブエクステンションOnNext
したがって、複数のソースからシーケンスを生成することができます。
同じことをマージしますか?
Rx契約では、通知が逐次であることが必要であり、複数のオペレータにとって論理的な必要性です。つまり、使用可能なSynchronize
メソッドを使用してこの動作を取得できます。
var subject = new Subject<int>();
var syncedSubject = Subject.Synchronize(subject);
syncedSubject
を同時に呼び出すことができます。同期させる必要があり、観察のために 、あなたも使用することができます。
var observer = Observer.Create<Unit>(...);
var syncedObserver = Observer.Synchronize(observer);
テスト:
Func<int, Action> onNext = i =>() => syncedSubject.OnNext(i);
Parallel.Invoke
(
onNext(1),
onNext(2),
onNext(3),
onNext(4)
);
いいえ、シーケンスは連続しているため、重複する通知は許可されません。同期メソッドを使用すると、適切な同期を実行できます。 Mergeのような演算子は、On *コールバックに対する適切なシリアル呼び出しを確実にするために、下流のオブザーバを呼び出すロックをとる。
someSubject.OnNext()
を呼び出すのはsomeList.Add()
と同じようにスレッドセーフです.1つ以上のスレッドから呼び出すことはできますが、同時に実行することはできません。あなたのOnNext
をlock
という声明で包みなさい。それは安全です。
同期の拡張メソッドを使用する例を提供することができますか? – user1604006