c# – 为什么IObservable.First()块?
发布时间:2020-12-15 06:55:56 所属栏目:百科 来源:网络整理
导读:我一直在试图围绕.NET的Reactive Extensions来解决这个问题,但已经有一个概念性的墙:我无法解释为什么IObservable.First()阻塞. 我有一些示例代码看起来有点像这样: var a = new ListItem(a);var b = new ListItem(b);var c = new ListItem(c);var d = new
我一直在试图围绕.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时,代码应该将订阅()到IObservables,所以很可能我在这里做错了.但是,根据各种方法签名,不可能执行以下操作之一: observableList.First().Subscribe(item => Assert.AreEqual(expectedFoo,item)); 要么 observableList.Subscribe(SomeMethod).First() // This doesn't even make sense,right? 我失踪了什么 解决方法
First()返回一个T,而不是一个Observable< T>,所以它必须被阻止.
一个非阻塞形式是xs.Take(1) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |