在ReactiveX范式中,处理线程安全是消费者(IObserver
)的责任吗?
E、 例如,当OnNext
仍在另一个线程上执行时,是否出现OnCompleted
调用?
看起来像是Rx的.净来源,但the docs个有点模糊.
在ReactiveX范式中,处理线程安全是消费者(IObserver
)的责任吗?
E、 例如,当OnNext
仍在另一个线程上执行时,是否出现OnCompleted
调用?
看起来像是Rx的.净来源,但the docs个有点模糊.
自从我最初在tweet分中提出这个问题以来,我相信我现在已经找到了一个权威的答案.
似乎我错误地认为线程安全序列化是用户的责任(IObserver
).
根据最初的Rx Design Guidelines份文件(似乎是一个最好保密的秘密:)
4.2. 假设以序列化方式调用观察者实例
As Rx使用推送模式和.NET支持多线程,它是
进一步:
6.7. 在可观察序列实现中序列化对
IObserver
个方法的调用Rx是一个可组合的API,许多操作员都可以使用
最后:
6.8. 避免序列化运算符,因为所有Rx运算符都必须遵守准则6.7,运算符可以安全地假定其输入为
我个人的看法是:如果一个生成IObservable
的原始序列在调用OnNext
、OnError
、OnComplete
(或者在订阅时调用Dispose
)时可以引入并行性,那么应该注意将这些调用正确序列化.