gpt4 book ai didi

c# - 为什么 IObservable.First() 会阻塞?

转载 作者:可可西里 更新时间:2023-11-01 09:04:36 26 4
gpt4 key购买 nike

我最近一直在努力了解 .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() block 并且永远不会到达 Assert.AreEqual()

现在,我知道在使用 Rx 时,代码应该 Subscribe()IObservable,所以很可能我做错了这里。但是,根据各种方法签名执行以下任一操作是不可能的:

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

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

我错过了什么?

最佳答案

在测试项目中试用此代码效果很好,因此我重新访问了有问题的代码。原来问题是因为 IObservable<ListItem>正在Publish()在幕后某处编辑,因此被转换为 IConnectableObservable<ListItem> .如果没有调用连接,订阅就不会被“激活”。

关于c# - 为什么 IObservable<T>.First() 会阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6924046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com