2013-08-20 58 views
0

当我将多个观察者订阅到某个主题时, 是否有保证观察者按照他们订阅的顺序被调用?订购顺序==单线程主题的观察顺序?

在Linqpad一个简单的测试似乎暗示是:

var observable = Observable.Return("foo"); 
var subject = new Subject<string>(); 

subject.Subscribe(_=>"Observer 1".Dump()); 
subject.Subscribe(_=>"Observer 2".Dump()); 
subject.Subscribe(_=>"Observer 3".Dump()); 

observable.Subscribe(subject); 

// Observer 1 
// Observer 2 
// Observer 3 

我明白,在多线程场景事情可能会变得相当棘手,所以我想问一下在单线程情况特定。主题订阅并在同一个线程上观察。

+2

这是你绝对应该*不*依靠的东西,不管它是否可以确认的行为。如果您希望一个订阅者始终在另一个订阅者之后运行,则其中一个订阅者直接调用另一个订阅者,触发事件或以其他方式执行会导致后续订阅者运行的操作。 – Servy

+0

相关:https://social.msdn.microsoft.com/Forums/en-US/ac721f91-4dbc-40b8-a2b2-19f00998239f/order-of-subscriptions-order-of-observations?forum=rx –

回答

3

当我向一个主题订阅多个观察者时,有没有保证观察者是按他们订阅的顺序调用的?

不,这是一个实现细节,此时恰好是真实的。