Buena introducción al .NET Reactive Framework [cerrado]

218

Además de la documentación de Microsoft, ¿hay una buena introducción y tutorial para el marco Microsoft Reactive (Rx)?

Además, ¿cuál es un buen ejemplo (con código) de que Reactive facilita un problema de programación que es difícil de resolver utilizando técnicas de codificación asincrónicas convencionales?

LBushkin
fuente
Sigo buscando: necesitaré ver muchos ejemplos antes de tener una buena idea de para qué se usa mejor.
Sam Harwell
44
Construí una pequeña demostración de búsqueda de Bing en vivo en WPF con Rx: blog.andrei.rinea.ro/2013/06/01/…
Andrei Rînea
55
Respondo exactamente esta pregunta en una serie de publicaciones en mi blog: rehansaeed.co.uk/reactive-extensions-part1-replacing-events
Muhammad Rehan Saeed

Respuestas:

97

ACTUALIZACIÓN : Las publicaciones de blog a continuación han sido reemplazadas por mi libro en línea www.IntroToRx.com . Es un libro completo de 19 capítulos disponible de forma gratuita. Puede navegar en la web o descargar la versión de mobi para su Kindle. También puede obtenerlo directamente de Amazon por una pequeña tarifa (~ 99c / 77p). Si el libro no cumple con sus necesidades o expectativas, avíseme (el Autor) y lo haremos mejor para la versión 2.

Gracias por el enlace a la publicación Hot / Cold. Esta es solo una parte de la serie completa ,

  1. Introducción a Rx
  2. Métodos estáticos y de extensión.
  3. Gestión de por vida: completar y cancelar la suscripción
  4. Control de flujo
  5. Combinando múltiples flujos IObservable
  6. Programación y subprocesos
  7. Observables fríos y calientes
  8. Prueba de Rx
  9. Buffer, Window, Join y Group Join

Seguiré actualizando este blog con más cosas introductorias de Rx.

Para cosas más avanzadas, desea ir al Foro Rx (MSDN).

Lee Campbell
fuente
77
He estado arrastrando mis pies aprendiendo sobre Rx porque todos los materiales de aprendizaje están en forma de videos. +1 por proporcionar este recurso basado en texto.
Daniel Schilling
Enumerar este enlace está muerto.
Maslow
2
Larga vida Enumere este enlace
Esqueleto a tiempo completo
1
Trabajo con James (EnumerateThis) y simplemente no lo ha tocado en años. No parece tener el tiempo o el apetito para revivirlo
Lee Campbell
85

Aquí hay un sitio wiki con muchos ejemplos de código que demuestran cómo usar diferentes características del marco .NET Rx: http://rxwiki.wikidot.com/101samples

Encontré que este es el sitio más completo que existe, y el que es más rápido para comenzar.

LBushkin
fuente
12
Hasta donde puedo decir, este wiki no te dice qué referencia incluir. Lo cual es bastante ... frustrante.
George Mauer
umm solo agrega los dlls y abre el explorador de objetos y busca la clase. por supuesto, el menú contextual del botón derecho en Visual Studio también ayuda
Joe
62

Sitio de MSDN para Rx-Framework

Para un desarrollador que profundiza, el código fuente

Buena nota austriaca sobre Rx

Esto es lo mejor que he visto: DevCamp 2010 Keynote - Rx: Curando su blues de programación asincrónica

Algunos videos interesantes en el canal 9

Kim Hamilton y Wes Dyer: Inside .NET Rx e IObservable / IObserver en el BCL (VS 2010)

Una entrevista con el creador de Rx: Expert to Expert: Brian Beckman y Erik Meijer - Inside the .NET Reactive Framework (Rx)

Una introducción del creador de Rx

Un artículo de Codeproject

Otro curso primer blog con enlaces (nuevo)

Hora de verano
fuente
55
+1 Recomiendo encarecidamente estos videos, aprendí MUCHO, también mire algunos de los videos de Bart De Smet en IQueryable e IQbservable. Comprenderá mejor el interior de Rx.
Gedeón
1
El proyecto completo de muestras para el video "DevCamp 2010 keynote" está aquí: bartdesmet.net/download/Rx40Samples.zip
Omer Raviv
16

Aquí hay un ejemplo de algo que es fácil de hacer con programación reactiva, pero desordenado (si no desafiante) con eventos clásicos, dibuja líneas mientras el botón del mouse está presionado. Es legible, no hay manejo explícito del estado:

var pen = new Pen(Color.Red, 3);
var graphics = this.CreateGraphics();

var mouseMoveWhileDown = 
    from md in this.GetMouseDown()
    from mv in this.GetMouseMove().Until(this.GetMouseUp())
    select new Point(mv.X, mv.Y);

mouseMoveWhileDown
    .Pairwise()
    .Subscribe(tup => graphics.DrawLine(pen, tup.Item1, tup.Item2)); 

(Debo confesar que en ese ejemplo, Pairwise () es de cosecha propia ...)

Lo más importante de IObservable es que es 'composable', al igual que IEnumerable.

Recomiendo el video mencionado en otra respuesta. De hecho, hay varios videos diferentes sobre el tema en Channel9:

Benjol
fuente
¿De dónde viene? Hasta que venga, nunca puedo usarlo, debo estar perdiendo una referencia
TimothyP
1
@TimothyP, creo que podría ser un retroceso a una versión anterior. Eso o lo escribí yo mismo (estaba jugando con la implementación de métodos de extensión IObservable en ese momento). Por lo que puedo ver, la última versión de extensiones reactivas tiene un método llamado TakeUntil, que parece un buen ajuste.
Benjol
Este es un ejemplo increíble que muestra el espíritu de Rx. Gracias.
Dan Abramov
¿Puedes compartir la implementación de Pairwise ()?
Blaster
1
@blaster, ¿qué tal esta implementación var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y))?
MisterMetaphor
3

Juega con Rx Sandbox para obtener una visión muy intuitiva de lo que significan los diferentes combinadores. Esta es la mejor herramienta de aprendizaje que he visto.

Omer Raviv
fuente
2

Para responder a la segunda pregunta, aquí hay un problema que puede beneficiarse mucho de Rx. Se llama "Hazte rico rápidamente".

Has desarrollado un juego con el mismo nombre y se está vendiendo bastante bien. Pero solo está disponible en sus tiendas al por mayor. Para facilitar el procesamiento de efectivo, tiene una cinta transportadora que fluye hacia usted.

(Por favor, siéntase libre de cambiar la historia anterior :))

Los vendedores colocan fajos de efectivo encuadernados sin etiquetas que indiquen la cantidad y el tipo de billetes en el fajo. Tu trabajo es ordenar y contar el dinero. Más adelante, cuando obtenga más dinero, puede contratar a otros para que lo ayuden.

En este caso, la fuente es una fuente asíncrona de fajos de dinero (Productor). Sus empleados y proveedores esperan dinero, pero debe consumir los tacos, desempaquetarlos y usar su lógica comercial personalizada para reempaquetar según corresponda para pagarlos.

Los vendedores se están ejecutando en su propio hilo, para que no tengan que esperar a que cuentes lo que tiran en el cinturón. Su tiempo se aprovecha mejor si le dicen cuándo hay más dinero disponible para contar, hasta entonces puede hacer otro trabajo.

Puede representar cada taco con un byte [].

Esta es una situación bastante común en el mundo real; cuando recupera cualquier recurso [por ejemplo, páginas web para motores de búsqueda, imágenes o videos] en una red o datos de periféricos, los obtiene en trozos de bytes (posiblemente con encabezados). En un solo subproceso, o en un entorno de subprocesos múltiples con el que es demasiado difícil trabajar, tiende a agregarlos y procesarlos. ¡¡Ya no!!

Actuación
fuente
estos son solo algunos productores (vendedores) que llaman a OnNext en el mismo IObserver <T> y luego el consumidor se suscribe pero se asegura de que esté observando en un hilo diferente al lugar donde se produce (OnNext).
Lee Campbell
1

Además de los enlaces de Andreas Hoffmann (los encontré muy útiles cuando estaba aprendiendo Rx)

Aquí hay algunos de Bart De Smet (un tipo MUY inteligente que explica muy bien las cosas) Videos:

Un poco a través de Rx:
Rx - Curando tus Blues de programación asincrónica

Algunos sangrientos interiores + alguna filosofía, estos videos son realmente esclarecedores:
Min LINQ: la esencia de LINQ
(el video anterior trata de cómo LINQ se relaciona un poco con otras cosas, como Rx)

Observaciones sobre IQbservable - The Dual of IQueryable

Gedeón
fuente