Реактивные расширения — это еще один шаг на пути к освоению асинхронного программирования, и это касается не только .NET — существует также версия JavaScript.
Согласно домашней странице Reactive Extensions:
Reactive Extensions (Rx) — это библиотека для создания асинхронных программ и программ, основанных на событиях, с использованием наблюдаемых последовательностей и операторов запросов в стиле LINQ.
Это не имеет большого смысла, если вы не знаете, что такое наблюдаемая последовательность. В большинстве случаев для обработки коллекции вы выполняете итерацию по коллекции, которая обычно считается завершенной. Последовательность Observable не обязательно завершается, когда вы начинаете обрабатывать ее коллекцию, и чтобы справиться с этим, Observable будет вызывать метод обработки каждый раз, когда есть какие-то данные для обработки. Это создает асинхронную итерацию, которая обычно выполняется в отдельном потоке.
Используя Rx, разработчики представляют асинхронные потоки данных с помощью Observables, запрашивают асинхронные потоки данных с помощью операторов LINQ и параметризуют параллелизм в потоках асинхронных данных с помощью планировщиков.
Проще говоря, Rx = Observables + LINQ + Schedulers.
Независимо от того, создаете ли вы традиционное настольное или веб-приложение, вам время от времени приходится иметь дело с асинхронным программированием и программированием на основе событий. В настольных приложениях есть операции ввода-вывода и дорогостоящие вычислительные задачи, выполнение которых может занять много времени и потенциально блокировать другие активные потоки. Кроме того, обработка исключений, отмены и синхронизации затруднена и подвержена ошибкам.
Используя Rx, вы можете представлять несколько потоков асинхронных данных (которые поступают из разных источников, например, котировки акций, твиты, компьютерные события, запросы веб-сервисов и т. Д.) И подписываться на поток событий с помощью интерфейса IObserver
Поскольку наблюдаемые последовательности являются потоками данных, вы можете запрашивать их, используя стандартные операторы запросов LINQ, реализованные типом Observable. Таким образом, с помощью этих статических операторов LINQ вы можете легко фильтровать, проецировать, агрегировать, составлять и выполнять операции на основе времени с несколькими событиями. Кроме того, существует ряд других операторов, специфичных для реактивного потока, которые позволяют писать мощные запросы. Отмена, исключения и синхронизация также корректно обрабатываются с помощью методов расширения, предоставляемых Rx.
Загрузки доступны здесь:
Реактивные расширения (Rx) v1.0.10621
Reactive Extensions v1.1.10621 (Экспериментальная)
а на Channel 9 есть вводные видеоролики:
Кроме того, в сообщении на Rx Forum от Барта де Смета, одного из членов Rx-команды и автора C # 4.0 Unleashed (см. Обзор I Programmer), сообщается, что Interactive Extensions (Ix) также возвращается в виде отдельной загрузки:
Экспериментальный выпуск Interactive Extensions v1.1.10621
Барт комментирует:
Мы сосредоточились на восстановлении функциональности, которая важна для большинства людей, устранили ряд операторов, которые нам не очень нравились (например, агрегаты * Enumerable), восстановили паритет с Rx, где это необходимо, и добавили поддержку IQueryable
Версия Rx для JavaScript, RxJS, следует тому же общему дизайну, но использует объекты JavaScript для реализации наблюдаемых последовательностей.
Больше информации:
Домашняя страница Rx в Центре разработчиков данных MSDN