BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Reactive Extensions for .NET 4.5

| 作者 Jonathan Allen 关注 529 他的粉丝 ,译者 李永伦 关注 0 他的粉丝 发布于 2011年11月18日. 估计阅读时间: 3 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

.NET 4.5带来了新的功能,我们可以趁这个机会再来探讨一下独立的Reactive Extensions库。Bart De Smet谈到了Rx实验分支里的情况,也提到了JavaScript和C++的Rx。

首先是Rx支持ExceptionDispatchInfo。在之前版本的.NET里,捕捉异常和抛出异常的线程一般是相同的。如果库需要把它们挪到另一个线程,会通过封送回调的字段传递它们,然后通过一个泛型异常包装它们。新的异常不能隐藏下面发生的真正错误。

ExceptionDispatchInfo.Capture方法用于捕获异常,然后通过ExceptionDispatchInfo.Throw在正确的线程里重新抛出。堆栈跟踪同时包括新的和原来位置的帧,并通过“End of stack trace from previous location where exception was thrown”文字分割两者。

Reactive Extensions创建的时候无法使用Task<T>,因为那时Task Parallel Library还不能用,即使现在,许多平台仍然不支持TPL,比如说,Silverlight。作为替代方案,Rx库是在.NET原来的异步模式上构建的。因此Observable可以通过Observable.FromAsyncPattern方法创建。

由于C# 5和VB 11支持的async/await是在任务之上构建的,各个平台现在应该完全支持Task Parallel Library了。这使得Rx项目最终可以直接从Task<T>构建Observable。

除了任务和Observable之间的转换,Reactive Extensions还将直接支持await关键字。这会返回IObservable序列的最后一项。如果想要序列里的全部项,可以通过ToList方法把IObservable<T>转成IObservable<List<T>>。

另一个改变是替换了Average和ForEach等阻塞操作。举个例子,新的ForEachAsync方法将会返回一个可以等待的Task。

JavaScript版的RxJS将会有一个新的版本,基于Rx的当前产品版本。目前还没有时间表,但他们表示已经进入完善阶段。Reactive Extensions组还有一个本地开发者负责C++版,暂命名为RxC。

查看英文原文:Reactive Extensions for .NET 4.5

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT