在我下面的例子中,我有2个主题和_primarySubject总是调用之前,_secondarySubject是保证在次回调之前接收主回调的用户?测试简单的测试似乎是说是或通过侥幸?由呼叫顺序交叉多个Rx主题保证排序?
如果这是侥幸,我该如何更改代码以保证顺序,正如我在这里所描述的。
非常感谢。
public class EventGenerator
{
ISubject<string> _primarySubject = new Subject<string>();
ISubject<int> _secondarySubject = new Subject<int>();
private int i;
public void SendEvent(string message)
{
_primarySubject.OnNext(message);
_secondarySubject.OnNext(i++);
}
public IObservable<string> GetPrimaryStream()
{
return _primarySubject;
}
public IObservable<int> GetSecondaryStream()
{
return _secondarySubject;
}
}
public class EventSubscriber
{
private static IScheduler StaticFakeGUIThread = new EventLoopScheduler(x => new Thread(x) { Name = "GUIThread" });
private readonly int _id;
public EventSubscriber(int id, EventGenerator eventGenerator)
{
_id = id;
eventGenerator.GetPrimaryStream().ObserveOn(StaticFakeGUIThread).Subscribe(OnPrimaryEvent);
eventGenerator.GetSecondaryStream().ObserveOn(StaticFakeGUIThread).Subscribe(OnSecondaryEvent);
}
private void OnPrimaryEvent(String eventMsg)
{
string msg = eventMsg;
}
private void OnSecondaryEvent(int i)
{
int msg = i;
}
}
[TestFixture]
public class EventGeneratorTest
{
[Test]
public void Test()
{
EventGenerator eg = new EventGenerator();
EventSubscriber s1 = new EventSubscriber(1,eg);
EventSubscriber s2 = new EventSubscriber(2, eg);
eg.SendEvent("A");
eg.SendEvent("B");
}
}