订阅已删除

时间:2012-06-22 20:22:30

标签: system.reactive reactive-programming

我有一个类似于以下的RX代码:

    static ISubject<Unit> m_events = new Subject<Unit>();
    private static EventLoopScheduler m_scheduler;

    static void Main(string[] args)
    {
        m_scheduler = new EventLoopScheduler();
        m_events.ObserveOn(m_scheduler).Subscribe(onEvent);            
        foo();
    }

    static void onEvent(Unit p)
    { 
        // do something
    }

    static void foo()
    {
        while (true)
        {
            m_events.OnNext(Unit.Default);
            Thread.Sleep(10);
        }
    }

几天后,程序停止进入onEvent方法,永远不会恢复。 (即使如此,OnNext调用仍在继续)。

订阅时没有调用dispose。

我使用rx-experimental 1.11111。

是什么导致这种情况?

3 个答案:

答案 0 :(得分:1)

一种可能性是调用OnException,一旦发生这种情况,订阅就会结束。

答案 1 :(得分:1)

如果引发OnCompleteOnError,则将忽略未来的OnNext值。

作为旁注,我是否正确假设您的实际循环代码在某个时间间隔内触发值更具相关性?否则你只需使用Observable.Interval

答案 2 :(得分:1)

您可以使用Rx v2.0 RC查看吗?我们在EventLoopScheduler和ObserveOn中解决了许多问题。