什么是 LINQ to events 又名 接收框架 又名 .NET 4.0 中的反应式扩展(但也可作为向后移植版本)?

换句话说,System.Reactive.dll 中的所有内容是做什么用的?

有帮助吗?

解决方案

.NET Rx 团队(这不是官方名称)发现任何推送序列(事件、回调)也可以被视为拉取序列(就像我们通常在访问可枚举时所做的那样)——或者它们本质上是对偶的。简而言之,观察者/可观察模式是枚举模式的对偶。

那么这种二元性有什么酷的呢?

您对拉序列(阅读声明式风格编码)所做的任何操作也适用于推序列。这里分几个方面。您可以从现有事件创建 Observable,然后将它们用作 .NET 中的一等公民 - 即,您可以从事件创建 Observable,并将其公开为属性。

由于 IObservable 是 IEnumerable 的数学对偶,因此 .NET Rx 促进了 LINQ 优于推送序列(如事件),就像 LINQ 优于 IEnumerables

它提供了更大的自由来编写新事件 - 您可以从一般事件中创建特定事件。

.NET Rx 引入了两个接口:IObservable 和 IObserver,它们“提供了使用输入和输出适配器作为事件源和接收器的生产者和消费者的替代方案”,这很快就会成为以声明方式编写异步代码的事实。这是一个简单的例子。

//Create an observable for MouseLeftButtonDown

var mouseLeftDown=Observable.FromEvent<MouseButtonEventArgs>  
        (mycontrol,"MouseLeftButtonDown");  

//Query the above observable just to select the points
var points = from ev in mouseEvents  
                 select ev.EventArgs.GetPosition(this);  

//Show points in the window's title, when ever user
//presses the left button of the mouse
points.Subscribe(p => this.Title = "Location ="  
                                        + p.X + "," + p.Y);

您也可以浏览这些帖子以详细了解头部和尾部。另请查看相关源代码。

看看这组文章

scroll top