2013-04-09 4 views
6

Я думаю о привлечении Rx на свое рабочее место, но чем больше я узнаю об этом, тем больше я думаю, что это не дает вам преимущества.Где использовать Rx?

У нас есть много серверных приложений, которые принимают входные данные на одном конце и выводят их на другом конце. Что идеально подходит для модели актера и «бесконечной» масштабируемости потоков, до сих пор я использовал ConcurrentQueues для реализации передачи сообщений, и я подумал, что Rx может быть более функциональной альтернативой, которая может сделать параллелизм более неявным, что поможет мне переместить некоторые из решения потоков данных от императивного кода к декларациям наблюдаемых.

Но, прочитав об этом и попробовав, я не вижу большого преимущества перед использованием обычных старых потоков с ConcurrentQueues для передачи сообщений. Какие преимущества дает мне Rx? Всегда говорят, что хотя .NET 4.5 сделал много Rx устаревшим (хотя async и Dataflow), он по-прежнему хорош для обработки потоков событий. Какие случаи представляют потоки событий и как их идентифицировать?

+0

Вы могли бы найти применение Нетфликса ПРМ Cо спаренный глядя на них, похоже, они хорошо работали для них https://blogs.msdn.com/b/interoperability/archive/2013/02/05/netflix-solving-big-problems-with-reactive-extensions-rx.aspx – Wilka

+0

Как правило (очень грубое), если вы имеете дело с одиночными значениями, используйте TPL/Task api; если вы имеете дело с последовательностями «событий» (общие «что-то», а не только события .net), используйте rx. Поток данных, с которым я менее знаком, мне придется подумать об этом. – JerKimball

ответ

4

Если вам нужно распараллелить некоторые задачи, используйте TPL.

Если вам необходимо выполнить асинхронные операции, используйте Task & async/await.

Если вам нужно получать, фильтровать и комбинировать потоки событий, используйте Rx. Обратите внимание, что Rx не обязательно асинхронный - это просто модель для обработки потоков событий таким же образом, что LINQ является моделью для работы с коллекциями.

Ваш случай использования звучит как первый вариант.

1

Там много подобных вопросов на SO ....

Rx все о математически-композиции на основе асинхронных операций. TPL и «обычные старые темы» не являются составными. Вы должны увидеть нетривиальные примеры, прежде чем сможете увидеть, какая композиция вам действительно приносит пользу.

Посмотрите на этой странице Введения в Rx (и остальное), и я уверен, что вы начнете обращали внимание на причины Rx: http://introtorx.com/Content/v1.0.10621.0/01_WhyRx.html#WhyRx

+0

Хорошая ссылка, стоит прочитать, если вы не уверены в «цели» Rx – AlexFoxGill