Руководство по System.Reactive.Joins - PullRequest
20 голосов
/ 07 марта 2012

Я ищу введение / некоторую документацию по System.Reactive.Joins, которая включает классы Pattern, Plan, QueryablePattern и QueryablePlan.Google ничего не показывает («System.Reactive.Joins»), в MSDN ничего нет, здесь нет примеров здесь , и отличные ресурсы этого вопроса не охватывают этот вопросnamespace.

У кого-нибудь есть указатели?

Ответы [ 5 ]

11 голосов
/ 03 апреля 2012

Нашел отличный вопрос SO, который показывает использование, но для меня общая цель Plan and Pattern - создать композиционную единицу наблюдаемого, а не составную наблюдаемую. Семантика, я знаю, но мне кажется немного проще использовать этот синтаксис, чем различные другие методы "Join". Это позволяет вам полностью отделить объединение от проекции, поэтому вы можете хранить промежуточные планы и составлять их с другими наблюдаемыми в любое время.

Например:

// Suppose we have observables o1, o2, ..., o9. All IObservable<int>.
var o1and2 = o1.And(o2); // Store this bad boy for later use. Pattern<int, int>
var o5and6and9 = o5.And(o6).And(o9).Then((t1,t2,t3) => t1+t2+t3); // Plan<int>
var o3and7 = o3.And(o7).Then((t1,t2) => string.Format("Result: {0}", t1+t2)); // Plan<string>
var o12ando8and6 = o1and2.And(o8).And(o6).Then((t1,t2,t3,t4) => new Tuple((decimal)t1, t2, t3.ToString(), t4)); // Plan<Tuple<decimal, int, string, int>>
// When similar results together. This will fire when any of the Patterns give a result.
var firstObserve = Observable.When(o1and2.Then((t1,t2) => t1+t2), o5and6and9); // IObservable<int>
var secondObserve = Observable.When(o3and7); // IObservable<string>
var thirdObserve = Observable.When(o12ando8and6); // IObservable<Tuple<decimal, int, string,int>>

ТАК Реактивные расширения для .NET (Rx): принять меры после завершения всех событий

Кроме того, нашел документ RX, который действительно помог понять, КАК использовать это:

http://www.clipcode.net/mentoring/RxReferenceLibrary.pdf

5 голосов
/ 30 марта 2012

Это единственное, что я нашел: Соединение шаблонов в Rx . Я также хотел бы видеть другие ресурсы по этим темам.

2 голосов
/ 03 апреля 2012

Кроме примера, который я упомянул здесь (теперь обновлен для использования Observable.When вместо Observable.Join), мне кажется, что общее представление о том, что вы будете использовать Когда и присоединиться к шаблонам, когда выхочу составить сами события, а не содержание событий.Поэтому я бы использовал другие операторы запросов, такие как SelectMany, когда я хочу сделать что-то связанное с наблюдаемыми данными.Когда я хочу сделать что-то чисто в ответ на то, какие события и какие шаблоны событий запускаются в определенном порядке, я бы использовал шаблоны соединения.Теперь нельзя сказать, что вы не можете объединить другие операторы запросов, скажем, Where и Select, чтобы отфильтровать и спроецировать некоторые значения из IObservable, которые позже будут использоваться в шаблоне соединения, но я думаю, что это хороший общий способчтобы взглянуть на это.

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

2 голосов
/ 03 апреля 2012

Реактивные расширения для .NET (Rx) blogs.msdn.com

... затем ждет возвращения первых двух из трех, используя шаблон соединения.

1011 *
*

Как объединить несколько IObservable последовательностей? * 1016 stackoverflow.com *

Как насчет использования нового оператора Join в v.2838 ...


Введение в реактивные расширения для JavaScript - новый выпуск и объединения weblogs.asp.net

... Reactive Extensions для JavaScript, который включает в себя многие изменения, о которых я говорил в последнее время, включая интеграцию сторонних библиотек, агрегаты, о которых я рассказывал в предыдущих статьях, и присоединения, которые являются темой сегодняшней публикации.


Пространство имен System.Reactive.Joins msdn.microsoft.com

Определение Microsoft пространства имен System.Reactive.Joins.

0 голосов
/ 03 апреля 2012

Не плохо использовать Reflector (или аналогичный инструмент),
сейчас просмотр исходного кода является бесценным инструментом для Rx. Вы можете увидеть, что он реализует, как - и сравнить с другими стандартными шаблонами Rx.
Кроме того, возможно, вы могли бы опубликовать проблему, что вы пытаетесь решить - и затем пойти дальше (и у других может быть больше идей).
РЕДАКТИРОВАТЬ: Нет исходного кода для Rx как таковой. Однако даже сотрудники Rx рекомендуют анализировать библиотеку, разбирая ее с помощью Reflector или аналогичных инструментов. Например. Вы можете использовать ILSpy, бесплатно, скачать Rx-провайдеры Nuget или у вас, как мне кажется, загрузить System.Reactive.Providers.dll и System.Reactive.dll в нее и наслаждаться :). Она не идеальна, не официальна и не компилируется, по крайней мере, легко - но вы можете понять, как все работает, и это мне очень помогло, бесценно!

...