问题标签 [system.interactive]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1588 浏览

c# - System.Interactive:Memoize() 和 MemoizeAll() 之间的区别?

在 Reactive Extensions 的 System.Interactive.dll (v1.0.2521.0) 中,EnumerableEx既有Memoize方法又有MemoizeAll方法。两者的 API 文档是相同的:

创建一个枚举原始枚举仅一次并缓存其结果的枚举。

然而,这些方法显然不相同。如果我使用Memoize,我的 enumerable 在我第一次枚举它时具有值,而第二次似乎是空的。如果我使用MemoizeAll,那么我会从任何一种方法的描述中得到我期望的行为——我可以根据需要多次枚举结果,并且每次都得到相同的结果,但源只枚举一次。

谁能告诉我这些方法之间的预期区别是什么?用例是Memoize什么?这似乎是一个相当无用的方法,文档非常混乱。

0 投票
3 回答
1355 浏览

c# - Rx:EnumerableEx.For() 与 Enumerable.SelectMany()

System.Interactive.dll 包含一个For()具有以下实现的方法:

我是否遗漏了某些东西,或者这是否等同于现有的Enumerable.SelectMany(), 减号this

0 投票
2 回答
426 浏览

linq - Linq-to-Objects 和 Linq-to-XML 中的 Let 语义问题

请考虑以下示例,其中包含嵌套 XElement 的定义和一对 Linq 表达式。第一个表达式按预期工作,迭代地获取底层的第一个和最后一个 XElement,方法是选择通过获取机器人(用于底部)生成的 tmp,存储在匿名类型的新实例中以重用名称“bots 。” 第二个表达式尝试做同样的事情,只是使用“Let”,但它根本不起作用。首先,编译器抱怨类型推断不起作用,然后,当我输入显式类型时,它会进入 IObservable 并变得更加丢失。我原以为这会非常简单,并且对失败感到非常惊讶和困惑。如果有人有时间查看和建议,我将不胜感激。您可以将以下内容粘贴到 LinqPad 中,

0 投票
1 回答
1740 浏览

c# - Silverlight 的反应式扩展 (Rx) - System.Interactive.dll 移至何处?

我刚刚为 Silverlight 4 和 5(Beta)安装了 Rx 的最新版本(v1.1.10425)。我已经看到该包缺少我过去在我的项目中使用过的 3 个 DLL:

我实际上缺少的是以下扩展方法:

它搬到了哪里?它是否与其他程序集合并?

0 投票
2 回答
1040 浏览

c# - System.Interactive.Async 中 IAsyncEnumerable 的鸭子枚举错误

我想知道为什么这个代码IAsyncEnumerable<>

引发异常:

“object”不包含“GetEnumerator”的定义

相同的代码可以IEnumerable<>正常工作。此外,IAsyncEnumerable<>通过反射的实现也可以正常工作。在 .NET 和 .NET Core 中重现。

IOutputFormatter实现将源数据作为对象并必须遍历它所需的代码。

dotnetfiddle 中描述的示例

0 投票
1 回答
2465 浏览

c# - 某处是否有 Ix.NET (System.Interactive) 的示例?

我有一个异步方法,比如:

并将从以下位置调用:

上面的语法无效,但基本上我在使用异步生成器。我知道它可以通过 Observables 处理。我确实对 Rx.NET 进行了实验,它在一定程度上起作用。但我试图避免它给代码库带来的复杂性,更重要的是,上述要求本质上仍然不是一个反应式系统(我们的仍然是基于拉的)。例如,我只会在一段时间内收听传入的异步流,并且我必须从消费者端停止生产者(而不仅仅是取消订阅消费者)。

我可以像这样反转方法签名:

但这使得在不阻塞的情况下进行 LINQ 操作有点棘手。我希望它是非阻塞的,并且不将整个东西加载到内存中。这个库:AsyncEnumerable完全符合我的要求,但如何使用Ix.NET完成相同的操作?我相信它们是为了同样的事情。

换句话说,我如何利用 Ix.NETIAsyncEnumerable在处理时生成一个await?喜欢,

0 投票
1 回答
51 浏览

c# - 在满足某些条件之前选择最后 n 个元素

是否有任何专用的交互式扩展方法可以在遇到某些条件之前生成最后 n 个元素?

例如对于数组src,我想在它之前获取元素 99 加上 2 个元素:

{{3, 4, 99}, {6, 7, 99}, {9, 10, 99}}

我想出了以下代码,但想知道是否有专用方法或方法组合来执行此操作。

0 投票
3 回答
2404 浏览

c# - 我怎样才能“适应”一个任务> 到 IAsyncEnumerable?

我正在逐步将 Ix.NET 引入到遗留项目中。我有许多返回的存储级 API Task<IEnumerable<T>>,但我想调整它们以IAsyncEnumerable<T>在系统的其余部分中使用。似乎应该有一个辅助方法(.ToAsyncEnumerable()IEnumerable 的ala)来帮助解决这个问题,但我找不到任何东西......我是否必须实现自己的自定义枚举器?(不难,但我不想重新发明轮子)

0 投票
2 回答
780 浏览

c# - 如何批处理 IAsyncEnumerable,在连续批次之间执行最大间隔策略?

我有一个异步的消息序列(流),有时会多次到达,有时会偶尔到达,我想分批处理它们,每批 10 条消息。我还想对接收消息和处理消息之间的延迟实施上限,因此如果在接收到批处理的第一条消息后经过 5 秒,还应该处理少于 10 条消息的批处理。我发现我可以通过使用System.Interactive.Async包中的Buffer运算符来解决问题的第一部分:

运营商签名Buffer

不幸的是,Buffer运算符没有TimeSpan参数过载,所以我不能这么容易地解决问题的第二部分。我必须自己实现一个带有计时器的批处理操作符。我的问题是:如何实现Buffer具有以下签名的运算符的变体?

timeSpan参数应影响Buffer操作员的行为,如下所示:

  1. timeSpan在发出前一批之后(或最初在调用方法之后)已经过去时,必须发出一个批次Buffer
  2. timeSpan如果在发出前一个批次之后已经过去,并且在此期间没有收到任何消息,则必须发出一个空批次。
  3. 比每个都更频繁地发出批次timeSpan意味着批次已满。在过去之前发出少于count消息的批次timeSpan是不可取的。

如果需要,我可以向我的项目添加外部依赖项,例如System.Interactive.AsyncSystem.Linq.Async包。

PS这个问题的灵感来自最近一个与通道和内存泄漏有关的问题。