gpt4 book ai didi

linq - IObservable 是否会添加类似 IQueryable 的功能? (.NET 接收)

转载 作者:行者123 更新时间:2023-12-04 06:00:33 25 4
gpt4 key购买 nike

.NET 4.0 中 System.Reactive 库中的新 IObservable/IObserver 框架非常令人兴奋(参见 thisthis 链接)。

现在推测可能还为时过早,但是否还会有一个(因为没有更好的术语)为这些新接口(interface)构建的类似 IQueryable 的框架?

一个特定的用例是协助在源头而不是在接收调用链中预处理事件。例如,如果你有一个非常“健谈”的事件界面,使用 Subscribe().Where(...)将通过管道接收所有事件,客户端进行过滤。

我想知道是否会有类似于 IQueryableObservable 的东西,这些 LINQ 方法将被“编译”成一些“智能”Subscribe在源中实现。我可以想象某些可以使用这种框架的网络服务器架构。或者 SQL Server(或任何 RDBMS)的附加组件如何允许 .NET 代码接收新的数据通知(代码中的触发器)并且需要在服务器端过滤这些通知。

最佳答案

好吧,你在最新版本的 Rx 中得到了它,它是一个名为 的接口(interface)形式。 IQbservable (发音为 IQueryableObservable)。请继续关注有关该主题的第 9 channel 视频,该视频将于下周初播出。

为了稍微定位这个特性,人们应该意识到 Rx/Ix 难题在概念上存在三个正交轴:

  • 什么数据模型是您的目标。在这里,我们发现基于拉的模型与基于推的模型。他们的关系是基于二元性的。这些世界之间存在转换(例如 ToEnumerable)。
  • 在哪里 您执行驱动查询的操作(sensu lato)。某些运算符需要并发性。这就是调度和 IScheduler 接口(interface)的用武之地。运营商的存在是为了在并发域之间跳跃(例如 ObserveOn)。
  • 如何需要执行查询表达式。逐字记录 (IL) 或可翻译(表达式树)。他们的关系基于同音性。两种表示之间都存在转换(例如 AsQueryable)。

  • 所有 IQbservable 接口(interface)(它是 IQueryable 和 IObservable 查询的表达式树表示的对偶)启用是最后一点。有时人们会混淆查询翻译的行为(“如何”运行)和远程处理(“在哪里”运行)。虽然通常您确实将查询翻译成某种目标语言(例如 WQL、PowerShell、用于云通知服务的 DSQL 等)并将它们远程传输到某个目标系统中,但这两个问题都可以解耦。例如,您可以使用表达式树表示来进行本地查询优化。

    关于可能的安全问题,这与 IQueryable 功能没有什么不同。通常,一个人只会远程表达语言,而不是任何“真正的副作用”运算符(无论这对于原教旨主义功能性语言以外的语言意味着什么)。特别是,Subscribe 和 Run 操作保持在本地,并将您带出可查询的 monad(因此触发翻译,就像 GetEnumerator 在 IQueryable 的世界中所做的那样)。你如何远程订阅的行为是我将留给读者想象的事情。

    开始玩 latest bits今天,让我们知道您的想法。还请继续关注即将发布的有关此新功能的第 9 channel 视频,包括对其一些设计理念的讨论。

    关于linq - IObservable 是否会添加类似 IQueryable 的功能? (.NET 接收),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179296/

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