gpt4 book ai didi

c# - 响应式扩展从 IObservable 转换为 IEnumerable

转载 作者:行者123 更新时间:2023-12-02 09:19:51 25 4
gpt4 key购买 nike

给定一个 Observable,一旦调用 Subscribe,它将开始推送事件。如何将序列转换为 IEnumerable。

2010 年,Jon Skeet 写下了他对 RX 的第一印象,并写下了这篇文章,这相当于我所需要的。

public static List<T> ToList<T>(this IObservable<T> source) 
{
List<T> ret = new List<T>();
source.Subscribe(x => ret.Add(x));
return ret;
}

https://codeblog.jonskeet.uk/2010/01/16/first-encounters-with-reactive-extensions/

虽然这个解决方案可行,但似乎应该有更好的方法。

我们真正感兴趣的是能够以与订阅类似的方式等待可观察对象。

await observable.ToList()

但是,这似乎对我不起作用。

我也研究过这两种方法

observable.ToEnumerable
observable.Next

更多信息

我计划用它来编写一些单元测试。

  1. 我正在使用 ReplaySubject 并使用测试替代品执行一系列操作。
  2. 对替补人员的调用通过 OnNext 进行记录。
  3. 我可以获取通话列表并断言它们是正确的。

最佳答案

有趣的是,斯基特先生的实现非常糟糕。它不会阻塞,因此仅当源恰好是重播主题(或类似主题)时才会将值泵入列表中。因此,对于大多数可观察序列,这只会返回一个空列表。我确信乔恩知道这一点,但可能在翻译中迷失了方向。

ToList() 是您想要的,所以我认为您可能没有完成?如果您只需要已知数量的元素,那么 Take(x).ToList() 就足够了。

关于c# - 响应式扩展从 IObservable 转换为 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43566903/

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