使用Rx Subject,从多个线程调用OnNext()是线程安全的吗?

因此,可以从多个来源生成序列。

合并会做同样的事情吗?

最佳答案

Rx契约(Contract)要求通知必须是顺序的,并且这对于多个运算符(operator)来说是逻辑上的必要。也就是说,您可以使用可用的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)
);

关于multithreading - react 性扩展OnNext线程安全,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12270642/

10-11 19:49