I am experimenting with RX and am facing the following problem (at least I perceive it as a problem). The following code creates an observable and subscribes to it twice. I thought that subscriptions should act independently , so the code below prints two lines, one for each subscription, each time you press a key. But this is not the case, I always get only one subscription to process a certain key stroke, a semi-random first or second. Why is this happening and what is the βrecommendedβ way to make several observers?
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(); }
source share