Observable.merge<'T>产生的意外后果的例子是什么?不是线程安全吗?

时间:2013-09-09 17:43:31

标签: f# thread-safety observable

documentation州:

  

“对于每个观察者,注册的中间观察对象不是线程安全的。也就是说,源不会在不同的线程上同时触发源的观察。”

这也适用于Observable.pairwise<'T>Observable.scan<'U,'T>

Observable.merge的一个例子是什么,如果它不是线程安全的,会以一种产生意想不到的后果的方式使用?

2 个答案:

答案 0 :(得分:2)

基于source code,看起来如果观察者都在不同的线程上发射OnCompleted,那么合并的observable可能无法完成。

答案 1 :(得分:0)

一般来说,线程安全表明使用来自不同线程的功能不会导致竞争条件或死锁。在这种特殊情况下,我猜测观察结果可能会相互覆盖,或者以可能导致崩溃或其他不稳定状态的方式交错执行。