在.NET反应性框架中实现LINQ
创始人
2024-04-27 02:20:52
0

反应性编程和.NET反应性框架并不是新事物。它早已经为Cells(一种Common Lisp的数据流扩展),和支持高阶反应性编程的Python扩展Trellis所应用。在C#中,程序员在指定异步操作指定回调,或事件处理程序的时候使用反应性编程。在异步操作完成或者事件触发的时候,就会调用方法并作为对该事件的反应。

在.NET反应性框架中,LINQ to Object使用IEnumerable和IEnumerator两个接口来迭代数据集。枚举器的MoveNext()方法用于从前一个元素枚举到下一个元素,而Current属性则用于检索个别的元素。这种机制采取广泛使用的简洁易懂的“拉(pull)”过程。Erik还发现IEnumerable有对偶特性:一个是可以从集合中提取数据,同时可以把数据推进同样的集合。这意味着另一种反应性编程的方式。

理论上来说,IEnumerable接口可对集合添加对象,但是由于它的阻塞性所以不能在异步操作中进行。那就是为什么该团队引入了两个新的接口:IObservable和IObserver。人们可以把IObserver赋给数据集并把它作为IObservable订阅。当一项新的数据可用时,就可以通过传递IObservable来把它压进集合,接着再传给IObserver。微软展示平台控件小组的开发人员Jafar Husain解释IObserver模式的使用方法如下:

要遍历IObservable,你需要做的就是执行与IEnumerable相反的操作。创建IObserver,把它赋给IObservable,接着IObservable通过调用自身的方法来把数据压进IObserver。在IObservable对Observer调用OnUpdate方法的时候,就相当于IEnumerable方法使用关键字yield向IEnumerable传递信息。类似地,在IObservable对Observer调用OnCompleted方法的时候,就相当于IEnumerable使用关键字break来表示没有数据一样。

这样做的好处是什么呢?这种方法在处理事件的时候有着极大的优势。我们可以把IObserver附加到鼠标事件并对这些事件异步记录到一个集合当中。接着就可以使用LINQ来迭代数据,并进行相应的处理。要说明它在处理GUI事件的威力,Rx框架已经在Silverlight Toolkit单元测试中使用,并包含源代码,封装在System.Reactive.dll中。这也将会包含在.NET 4.0。

软件架构师和天文物理学家Brian Beckman在视频采访Erik Meijer时,证实了IObservable是连续的Monad,即IEnumerable Monad的对偶性。Erik也介绍了如何通过二元化IEnumerable来构建IObservable 接口。

在.NET反应性框架中实现LINQ就介绍到这里。

【编辑推荐】

  1. 使用LINQ查询泛型字典Dictionary
  2. 浅析Linq to SQL更新数据时容易忽略的问题
  3. 浅谈LINQ to SQL集成数据库语言优劣
  4. LINQ横向对比foreach方法
  5. 浅谈LINQ如何插入删除和更新数据库记录备注

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...