Почему IObservable .First () блокируется?

В последнее время я пытался осмыслить Reactive Extensions для .NET, но натолкнулся на концептуальную стену: я не могу понять, почему IObservable. Блоки First ().

У меня есть пример кода, который выглядит примерно так:

var a = new ListItem(a);
var b = new ListItem(b);
var c = new ListItem(c);
var d = new ListItem(d);

var observableList = new List<ListItem> { a,b,c,d }.ToObservable();

var itemA = observableList.First();

// Never reached
Assert.AreEqual(expectedFoo, itemA.Foo);

Я ожидал, что itemA будет ссылочно равным a а также возможность доступа к его членам и т. д. Вместо этого происходит то, что First () блокируется, а Assert.AreEqual () никогда не достигается.

Теперь я знаю достаточно, чтобы знать, что при использовании Rx код должен Subscribe () на IObservable s, так что вполне вероятно, что я только что поступил неправильно. Однако на основе различных сигнатур методов невозможно выполнить одно из следующих действий:

observableList.First().Subscribe(item => Assert.AreEqual(expectedFoo, item));

или

observableList.Subscribe(SomeMethod).First() // This doesn't even make sense, right?

Что мне не хватает?

10
задан alastairs 3 August 2011 в 09:05
поделиться