Ответ 1
Контракт 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)
);