Подтвердить что ты не робот

Руководство по System.Reactive.Joins

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

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

4b9b3361

Ответ 1

Нашел отличный 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>>

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

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

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

Ответ 3

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

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


fooobar.com/questions/258847/...

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


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

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


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

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

Ответ 4

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

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

Ответ 5

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