.Net的 Reactive Extension (Rx)

WGCNA样本量不够怎么办?5种替代方案帮你解决小样本基因共表达分析难题 本文针对WGCNA样本量不足的问题,提供了5种科学替代方案,包括CEMiTool、参数调整、多组学数据整合、机器学习特征提取和公共数据利用。这些方法帮助研究者在小样本条件下仍能进行可靠的基因共表达分析,特别适用于罕见病和珍贵临床样本研究。 阅读详情
原文发表地址]: Reactive Extensions for .NET (Rx)

[原文发表时间]:Wednesday, November 18, 2009 8:05 AM


我非常高兴的宣布 .NET 的 Reactive Extensions (Rx) 预览版在MSDN DevLabs发布了。

  使用Rx, 程序员能够基于我们所熟知的.NET风格和模式编写的简明的声明式代码,来设计和协调异步的和事件驱动的程序。Rx 具有坚定的理论基础,使用传统迭代(Iterator)和观察者(Observer)设计模式之间的二元性来简化异步控制。通过把LINQ的表达方式与范畴论的优雅相结合,Rx 允许程序员不用理会那些使人痛苦和不自然的行为就可以编写异步的代码。

  顾名思义,反应式的程序对所在运行环境中的变化做出反应,传统上,程序员使用锁和事件句柄来协调这些变化。Rx 像push-based,或observable、集合一样为异步计算和事件建模,因此它扩大了标准LINQ 顺序运算符和扩展方法的范围,并超越了我们熟悉的基于拉的(pull-based)、或枚举、集合,进入了反应式编程领域。

  实际实践

  .NET的Reactive Extensions包含一系列扩展方法和为.NET 4及Silverlight 4中新加入的 IObservable<out T> 和 IObserver<in T>接口实现的LINQ标准顺序运算符。加入到.NET中的Observable接口为基于推(push-based)的通知提供了一个公共接口,并能够基于此创建.NET的一些其他功能和类库。Rx致力于事件驱动和异步计算的协调和策划,并且采用新的任务并行库作为它内部的并发机制。

  Reactive Extensions可以在任何.NET语言中使用,在F#里面,最有价值的就是.NET事件。它实现了IObservable<out T>接口。除此之外,F#还提供了一些基本的函数来构造observable集合,并且F#开发人员可以使用Rx获取更加丰富的运算符来构造事件和其他observable集合。

  Silverlight工具箱利用Rx为其工具箱的拖放框架提供支持,它使用一套WPF API的子集来初始化拖操作和负责与它交互。拖放框架为一些核心的控件比如Treeview, DataGrid, ListBox增加了拖放操作的支持.允许拖放操作以声明方式来描述。这在很大程度上减少了开发时间。 Silverlight异步的创造可视元素,因此我们通常需要编写异步测试代码来确保一个组件已经被正确的创建。Silverlight 单元测试框架提供的Rx功能允许开发人员编写可靠的事件处理代码而不用牺牲代码的可读性。

  示例代码

  下面的例子展示了一个简单的AJAX风格的反应式程序,它使用Bing的翻译服务来翻译英文并显示结果。

.Net的 Reactive Extension (Rx)

  上图页面中的输入框设计为一个可观察的字符串集合,当用户暂停输入半秒钟左右,可以从中取得相应的字符串值。GetKeyUpEvents 扩展方法将.NET 的KeyUp事件暴露成一个可观察的集合。


 IObservable<string> words = (from keyup in Input.GetKeyUpEvents() select Input.Value).Throttle(TimeSpan.FromSeconds(.5))

  要访问Bing的翻译服务,我们只使用了一个简单的WCF服务引用。这个服务在一个函数中使用了标准的.NET BeginInvoke/EndInvoke 或事件驱动模式。而该函数通过Rx提供一个标准辅助函数返回一个Singleton的Observable集合。

IObservable<TranslationResponse> Translate(this string text, string sourceLanguage, string destinationLanguage){…}

  不同计算之间的协调工作使用了LINQ查询语句,通过发送请求到Bing的翻译服务将每一个词翻译成荷兰语、法语和西班牙语,然后使用一个连接(Join)模式等待其中最先完成的2项结果返回。

 var translations = from word in words

    let dutch = Bing.Translate(word, "en", "nl")

    let french = Bing.Translate(word, "en", "fr")

    let spanish = Bing.Translate(word, "en", "es")

    from results in Observable.Join

                 ( dutch.And(spanish).Then((d, s) =>  
                     new { Dutch = d, French = Bing.NoResult, Spanish = s })

                 , dutch.And(french).Then((d, f) =>
                     new { Dutch = d, French = f, Spanish = Bing.NoResult })

                 , french.And(spanish).Then((f, s) => 
                     new { Dutch = Bing.NoResult, French = f, Spanish = s })

                 ).Until(words)

    select results;

  最后,我们订阅这个翻译结果并且一旦收到变化通知我们就更新用户界面。

 translations.Subscribe(result =>

    {

        Dutch.InnerText = result.Dutch.GetTranslatedTerm();

        French.InnerText = result.French.GetTranslatedTerm();

        Spanish.InnerText = result.Spanish.GetTranslatedTerm();

    });

  开发人员不必担心要在正确的线程里执行订阅服务,Rx运行时会负责照管这些。

  更多有用的东西

  除了为Observable集合提供扩展方法,Rx也包含了一系列的试验性的类型和名称空间给开发人员试验,它们为基于枚举的Observable集合实现了一些新的扩展方法,并为.NET 3.5提供了一个试验性的PLINQ。

  现在就用吧

  你可以从Dev Lab 下载Rx 。别忘了在项目论坛告诉我们你的想法哦,还可以去Channel 9看相关视频。

  Namaste!

  View article...

  作者:Soma

  本文链接:http://blog.joycode.com/soma/archive/2009/12/23/115822.joy

相关消息:

责任编辑:杜飞

关键字:.Net,技术

更多

【蓝凌表单】JSP组件常用语法整理 【代码】【蓝凌表单】JSP组件常用语法整理。 阅读详情

相关推荐

【前端HTML生成条形码——MQ】

本文将展示前端HTML如何根据用户输入内容生成对应的条形码,附HTML和JS代码。代码如下(示例):

weixin_42588676的博客 1955

Reactive Extensions for .NET (Rx)

LINQ to Object使用IEnumerable和IEnumerator两个接口来迭代数据集。枚举器的MoveNext()方法用于从前一个元素枚举到下一个元素,而Current属性则用于检索个别的元素。这种机制采取广泛使用的简洁易懂的"拉(pull)"过程。与之还有一种对应的"推"模式:一个是可以从集合中提取数据,同时可以把数据推进同样的集合。 理论上来说,IEnumerable接口可对集...

weixin_34358092的博客 181

避开这些坑!海天MA1600注塑机数据采集项目经验分享

本文分享了海天MA1600注塑机数据采集项目的实战经验。针对KEBA控制器接口不开放的难题,项目采用专用网关进行协议转换,并详细剖析了网络部署、ModbusTCP配置、数据准确性保障及现场运维中遇到的典型陷阱与解决方案,为同类工业物联网项目提供宝贵参考。

o4p5q6r7s的博客 491

.Net中的反应式编程(Reactive Programming)

一、反应式编程(Reactive Programming) 1、什么是反应式编程:反应式编程(Reactive programming)简称Rx,他是一个使用LINQ风格编写基于观察者模式的异步编程模型。简单点说Rx = Observables + LINQ + Schedulers。 2、为什么会产生这种风格的编程模型?我在本系列文章开始的时候说过一个使用事件的例子: var watch...

dz45693的专栏 2916

std::map看来可以被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

tumu_C的博客 1019

Adaboost入门教程——最通俗易懂的原理介绍(图文实例)

Adaboost入门教程——最通俗易懂的原理介绍(图文实例)

Max的杂物仓 11万+

.NET并发编程-Reactive Extensions反应式扩展

1、反应式编程 它是一种编程范式,将事件作为数据流异步监听和处理。与编辑Excel表格类似,单个元素的值是由其他单元格的值决定的公式。一旦其他单元格的值发生变化,该公式的单个单元格将相应更新。 如果操作是以声明方式描述的,那么它就是函数式反应式编程。 反应式编程的优点是描述了一种简单易维护的方法来处理异步、无竞争的计算和IO,从而增加了多核、多CPU硬件上计算资源的使用。事件的控制从“请求”变成了“等待”。在大数据的实时流处理环境中,采用了反应式编程,如推文系统处理、日志系统收集等。 2、.NET中的工具

faysh的博客 568

GPU运维工程师入门指南 (第九篇): 高性能网络 - InfiniBand与RDMA技术

本文介绍了支撑AI分布式训练的高性能网络技术InfiniBand和RDMA。传统TCP/IP网络因内核开销和内存拷贝成为性能瓶颈,而InfiniBand提供高带宽、低延迟的专用网络,RDMA则通过内核旁路和零拷贝技术实现节点间内存直接访问,显著提升通信效率。特别介绍了GPUDirect RDMA技术,使GPU显存可直接通信。文章还列举了运维人员在部署这些技术时需要考虑的硬件、驱动、配置和监控等关键点。这些技术共同构成了支撑大规模AI集群的"数据高速公路",为后续讨论存储性能瓶颈奠定了基础

weixin_42587823的博客 1097

C# System.Reactive 特性

Scheduler的用法 Task.Run(async () => { Console.WriteLine("Task.Run! " + Thread.CurrentThread.ManagedThreadId.ToString()); Observable.Timer(T...

Benny Shader 4155

【ESP32】ESP32连接JY61P并通过WIFI发送给电脑

ESP32S连接JY61P并通过WIFI把姿态数据发送给电脑1.采用Arduino IDE编译器;需要安装ESP32的开发板管理器;2.电脑接受数据是基于python的;

Doudou_Nai的博客 1132

LeRobot — 基于 PyTorch 的真实世界机器人学习框架(一)- 核心框架模块解析

LeRobot 是一个开源的机器人学习框架,由 Hugging Face 开发,旨在降低机器人学的准入门槛。该框架提供完整的机器学习流程支持,包括数据采集、训练、评估和部署。核心模块涵盖数据集标准化、策略算法、硬件抽象和强化学习组件,采用模块化设计实现灵活扩展。通过集成 Hugging Face Hub,用户可以轻松共享数据集和预训练模型。LeRobot 特别注重真实世界的机器人应用,支持多种前沿算法如模仿学习、视觉语言动作模型等,并提供统一的硬件接口和仿真环境适配。

熊猫小妖的AI世界 171

【亲测免费】 探索 ReactiveUI:响应式编程在 .NET 中的新篇章

是一个强大的开源框架,专为 .NET 开发人员设计,用于构建基于反应式编程模型的应用程序。该项目致力于将声明性、响应式的编程范式引入到 UI 编程中,从而简化复杂应用的维护和扩展。 ## 技术分析 **1. 反应式编程** ReactiveUI 基于 [Reactive Extensions (Rx)](http://reactivex.io/) 库,这是一个处理异步数据流的强大工具集。通过 ...

gitblog_00039的博客 1288

容器化部署指南——Docker/K8s环境下的OpenClaw实践(附Dockerfile)

通过本文的详细指导,你已经掌握了OpenClaw在Docker和Kubernetes环境中的容器化部署方法。从基础镜像构建到高级部署策略,从开发环境到生产环境,你现在已经具备了完整的容器化部署能力。 容器化技术为OpenClaw提供了灵活、可扩展、可移植的部署方案,能够满足不同规模和需求的应用场景。通过合理使用Docker和Kubernetes,你可以实现高效的部署管理和运维自动化。 在实际应用中,建议根据具体的业务需求选择合适的部署策略,并结合监控、日志、安全等最佳实践,确保系统的稳定性和可靠性。同时

博客 495

Reactive Extensions入门

https://www.cnblogs.com/yangecnu/archive/2012/11/03/Introducting_ReactiveExtensions.html 前面我写过7篇文章粗略的介绍了一下Rx及其方方面面。Rx是一个好东西不然我也不会费这么大的力气来写这些东西。本文打算初略的讲一下传统异步编程方法的缺点,以及为啥Rx能够给异步编程带来新的体验。最后我听译...

weixin_30600503的博客 183

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【好文收藏】Reactive Extensions入门

【好文收藏】Reactive Extensions入门最近想用ReactiveUI.NET来做一个新项目,网上找了一些比较不错的资料,赶紧收藏。中文博客 Reactive Extensions入门 Reactive Extensions入门(1):LINQ和Rx简单介绍 Reactive Extensions入门(2):LINQ操作符 Reactive Extensions入门(3):Rx操作符 R

阿利的技术积累 2543

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

牛刀小试:使用Reactive Extensions(Rx),对短时间内多次发生的事件限流

我之前有一篇文章介绍到了Reactive Extension这个组件,请参考下面的文章,其中有一些基本的概念和相关的链接 牛刀小试:使用Reactive Extensions(Rx),一行代码实现多线程任务执行规定时间后自动停止   Rx 目前还没有直接整合到.NET Framework 中,仍然是作为单独的组件存在。至于以后会不会,谁知道呢?我个人希望是可以整合进去。 不管怎么样,我今天还是以...

weixin_33962621的博客 164

Reactive Extensions简介一

在.Net 4.0中引入了两个新的接口用来实现观察者模式——IObservable和IObserver。IObservable是数据源,IObserver是观察者,观察者订阅数据源后,当新的数据产生时,将其主动传给所有的订阅者(Iobserver)。 观察者模式比较基础,因此在这里并不多加介绍,没有相关基础的朋友可以参看MSDN的这两个链接。 lObserver(观察器) l探究观察者...

weixin_30500289的博客 77

Reactive Extensions介绍

Reactive Extensions(Rx)是对LINQ的一种扩展,他的目标是对异步的集合进行操作,也就是说,集合中的元素是异步填充的,比如说从Web或者云端获取数据然后对集合进行填充。Rx起源于Microsoft DevLabs小组的研究,他扩展了LINQ的一些特性,目前Rx支持多种平台如JavaScript,Windows Phone,ios,Android 。随着数据处理变得复杂,LINQ...

weixin_34161029的博客 208

用Reactive Extension实现异步方法超时的操作

            Action action = new Action(() =&gt;                {                    Thread.Sleep(5000);                });            var Async = Observable.FromAsyncPattern(action.BeginInvoke, action...

weixin_34224941的博客 122

ReactiveX 的 Rx.NET 观察数据流进行异步编程

安装 url https://github.com/dotnet/reactivehttps://github.com/dotnet/reactiveReactiveX · ReactiveX文档中文翻译https://mcxiaoke.gitbooks.io/rxdocs/content/Intro.htmlRx.NET响应式编程 - 走看看响应式编程 Rx.NET 了解下 1. 引言 An API for asynchronous programming wi...

绀目澄清 904

.NET 响应式编程 System.Reactive 系列文章(一):基础概念

#引言在现代软件开发中,处理异步事件和数据流已经成为常见的需求,比如用户输入、网络请求、传感器数据等。这些数据流通常是无限的、异步的、实时的,而传统的编程方式往往无法优雅地处理这些情况。响应式编程(Reactive Programming)为我们提供了一种新的思路,帮助开发者更自然、更高效地管理数据流和异步事件。在 .NET 中,响应式编程的核心库是System.Reactive,通常简称为R...

dotNET跨平台 350

Reactive UI -- 反应式编程UI框架入门学习(一)

在MVVMLight中定义一个带通知的属性和Commond:{}}{?}}在ReactiveUI中也通成功了类似RaisePropertyChanged和RelayCommand功能的API,RaiseAndSetIfChanged和ReactiveCommand。{}}{?}}其中ReactiveCommand的两个Unit,前一个是传入参数,后一个是返回值。ReactiveCommand的定义与MVVMLight大同小异。

sinat_40572875的博客 6389

.NET Reactive Extensions (Rx) 开源项目快速入门指南

Reactive Extensions for .NET,简称Rx.NET,是一个用于处理异步数据流和基于事件的程序的强大库。它允许开发者以声明式的方式组合和操作异步数据流,极大地简化了事件处理和异步编程模型。本指南将带领您深入了解GitHub上的开源项目`https://github.com/dotnet/reactive.git`的基本结构、关键文件以及配置细节。 ## 1. **项目目录结...

gitblog_00393的博客 1124

.NET 响应式编程 System.Reactive 系列文章(二):深入理解 IObservable<T> 和 IObserver<T>

在 Rx 中,数据流的生产和消费是通过 观察者模式(Observer Pattern) 实现的。这种模式定义了两种角色:IObservable和IObserver

VAllen的专栏 990

Rx学习之面向 .NET 和 C# 开发人员的响应式编程 - IEnumerable、IQueryable、IObservable 和 IQbservable 简介

响应式扩展已经存在了一段时间,在这篇文章中,我们应该更详细地讨论反应式扩展。此外,在这篇文章中,我们将触及IQbservables——世界上最神秘的名字/界面,可能是在希格斯玻色子之后。推送和拉取序列无处不在 - 现在设备在一端,云在另一端,大多数数据交易都是通过推/拉序列进行的。因此,必须掌握有关其周围编程模型的基本概念。

Three_ST的博客 1246
上一篇: 体验SubSonic
下一篇: sql server表中timestamp类型的具体说明
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值