Вопрос

Что такое LINQ to events, также известное как RX Фреймворк он же Реактивные расширения в .NET 4.0 (но также доступны в виде бэкпортированных версий)?

Другими словами, для чего все это в System.Reactive.dll?

Это было полезно?

Решение

Команда .NET Rx (это не официальное название) обнаружила, что любая последовательность push (события, обратные вызовы) также может рассматриваться как последовательность pull (как мы обычно делаем при доступе к перечисляемым) - или они двойственны по своей природе.Короче говоря, шаблон observer / observable - это двойственный шаблон перечисления.

Так что же классного в этой двойственности?

Все, что вы делаете с последовательностями вытягивания (читай кодирование в декларативном стиле), применимо и к последовательностям выталкивания.Вот несколько аспектов.Вы можете создавать наблюдаемые объекты из существующих событий, а затем использовать их в качестве граждан первого класса в .NET - т.Е. вы можете создать наблюдаемый объект из события и предоставить его в качестве свойства.

Поскольку IObservable является математическим двойником IEnumerable, .NET Rx облегчает LINQ над push-последовательностями, такими как события, во многом подобно 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);

Вы также можете просмотреть эти сообщения, чтобы получить более подробную информацию о голове и хвосте.Также взгляните на соответствующий исходный код.

Ознакомьтесь с этим набором статей

Другие советы

Подробнее об этом можно прочитать здесь: http://themechanicalbride.blogspot.com/2009/07 /introducing-rx-linq-to-events.html

Мое первое знакомство было в этом блоге, когда я читаю его книгу по F #: http://tomasp.net/articles/reactive-ii-csevents.aspx

В основном я понимаю, что когда вы пишете обработчик событий для движений мыши, например, вы можете непрерывно фиксировать эти события и, возможно, иметь возможность подсчитывать, сколько движений или щелчков, но, в основном, вы хотите использовать эту информацию в большем количестве способов, чем просто в качестве обработчика событий. Поэтому просто относитесь к событиям как к непрерывному потоку.

Кроме того, посмотрите это видео на канале 9: Эксперт-эксперт: Брайан Бекман и Эрик Мейер - Внутри .NET Reactive Framework (Rx)

Из описания шоу:

  

.NET Reactive Framework (Rx) - это математический двойник LINQ для   Объекты. Он состоит из пары   интерфейсы IObserver / IObservable, что   представляют толчок, или наблюдаемый,   коллекции, а также библиотека   методы расширения, которые реализуют   Стандартные операторы запросов LINQ и   другое полезное преобразование потока   функции.

Я думаю, что суть RX заключается в изменении угла , с которым мы смотрим на информацию. Естественно, каждый фрагмент информации является результатом какого-то процесса, происходящего в пространственно-временном континууме. Традиционный подход работает с проекцией процесса на «текущую» временную плоскость, в результате чего теряются детали измерения времени.

RX работает с проекцией в какое-то другое измерение, также захватывая компонент времени, поэтому неудивительно, что LINQ to RX - это расширенный набор обычного LINQ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top