我正在与RX试验,以及跨以下问题运行(至少我认为它是一个问题)。下面的代码创建了一个可观察到的,并订阅了两遍。我想的预订应独立地作用下,所以下面将输出两行的代码,一个用于每个订阅,在每个键按压。但是,这是不是这样的,我总是只有一个订阅,半随机的第一或第二处理特定的按键敲击。为什么发生这种情况,什么是“推荐”的方式来做到多个观察者?

    static IEnumerable<ConsoleKeyInfo> KeyPresses()
    {
        for (; ; )
        {
            var currentKey = Console.ReadKey(true);

            if (currentKey.Key == ConsoleKey.Enter)
                yield break;
            yield return currentKey;
        }
    }

    static void Main()
    {
        var timeToStop = new ManualResetEvent(false);
        var keypresses = KeyPresses().ToObservable();
        keypresses.Subscribe(key => Console.WriteLine(key.Key + "1"), 
           () => timeToStop.Set());
        keypresses.Subscribe(key => Console.WriteLine(key.Key + "2"), 
           () => timeToStop.Set());
        timeToStop.WaitOne();
    }
有帮助吗?

解决方案

这样做的原因特定行为是可观察到的是的即可。这意味着每个订户是耗时上.GetNext)的ReadKey呼叫(。一旦通过调用作为I“预热”的可观察

var keypresses = KeyPresses().ToObservable().Publish(); 

每个用户接收到其自身的值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top