4
我正在嘗試使用RX,並運行以下問題(至少我認爲它是一個問題)。下面的代碼創建一個observable,併爲它訂閱兩次。我認爲訂閱應獨立行動,因此下面的代碼會在每次按鍵時輸出兩行,每個訂閱一行。但事實並非如此,我總是隻能得到一個訂閱來處理特定的關鍵筆劃,半隨機的第一個或第二個。爲什麼會發生這種情況,以及「推薦」的方式來做多個觀察者?訂閱爲什麼互相交互?
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();
}