Примеры Reactive Framework для .NET, доказывающие его полезность

Вокруг новой версии Reactive Framework в .NET 4.0. Хотя я думаю, что понял его основную концепцию, я не полностью уверен, что он настолько полезен. Можете ли вы привести хороший пример (наполовину простой для понимания), который полностью демонстрирует мощь и полезность Rx? Покажите что-то, что делает жизнь намного проще, когда это делается с помощью Rx.


person bitbonk    schedule 18.11.2009    source источник
comment
См. один пример здесь: stackoverflow.com/questions/1596158/   -  person Benjol    schedule 18.11.2009
comment
Когда толчок полезен? Когда тянуть полезно?   -  person DoctorFoo    schedule 02.05.2010


Ответы (2)


Вот быстрый пример. Запрограммируйте операцию перетаскивания в полностью декларативной манере, используя LINQ для событий.

   //Create an observable with the initial position and dragged points using LINQ to Events
   var mouseDragPoints = from md in e.GetMouseDown()
                           let startpos=md.EventArgs.GetPosition(e)
                           from mm in e.GetMouseMove().Until(e.GetMouseUp())
                           select new
                           {
                             StartPos = startpos,
                             CurrentPos = mm.EventArgs.GetPosition(e),
                           };

И нарисуйте линию от начальной до текущей позиции

//Subscribe and draw a line from start position to current position  
            mouseDragPoints.Subscribe  
                (item =>  
                { 
                  //Draw a line from item.Startpos to item.CurrentPos
                }
                ); 

Как видите, нигде нет ни обработчиков событий, ни логических переменных для управления состоянием.

Если вам интересно узнать об этих методах GetEventName(), предлагаю вам прочитать всю эту статью, загрузить исходный код и поиграть с ним.

Прочитайте здесь и поиграйте с источником >>

person amazedsaint    schedule 18.11.2009

Недавно я написал пошаговую демонстрацию в своем блоге: http://blog.andrei.rinea.ro/2013/06/01/bing-it-on-reactive-extensions-story-code-and-slides/< /а>

Я в основном создаю небольшое приложение в WPF с поиском Rx и Bing:

введите здесь описание изображения

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

Вы можете принудительно выполнить поиск (чтобы пропустить время ожидания), нажав ENTER или Go! кнопку и может остановить текущий поиск, нажав кнопку Очистить. Есть индикатор занятости и некоторая обработка ошибок (например, в случае отказа сети).

Основные затронутые темы:

  • Создание наблюдаемого из события (TextChanged, Button.Click и т. д.)
  • Асинхронный делегат (асинхронный поиск)
  • Расширение TakeUntil
  • Расширение DistinctUntilChanged (включая настраиваемые Equals)
  • Объединить расширение
  • Расширение дроссельной заслонки
  • Расширение ObserveOn (для синхронизации потоков пользовательского интерфейса)

.. и больше!

person Andrei Rînea    schedule 01.06.2013