c# – 为什么IObservable.First()块?

我一直在试图围绕.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)

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...