最近,我一直试图了解 .NET 的 Reactive Extensions,但遇到了一些概念性问题:我无法弄清楚为什么 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?
我错过了什么?