最近、Reactive Extensions for .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()
到達することはありません。
Subscribe()
これで、Rxを使用する場合、コードはsにすべきであることを十分に理解しているIObservable
ので、ここで間違ったことをした可能性があります。ただし、さまざまなメソッドシグネチャに基づいて、次のいずれかを実行することはできません。
observableList.First().Subscribe(item => Assert.AreEqual(expectedFoo, item));
また
observableList.Subscribe(SomeMethod).First() // This doesn't even make sense, right?
私は何が欠けていますか?