Buona introduzione a .NET Reactive Framework [chiuso]


218

A parte la documentazione di Microsoft, c'è una buona introduzione e tutorial per il framework Microsoft Reactive (Rx)?

Inoltre, qual è un buon esempio (con codice) che Reactive semplifica un problema di programmazione che è difficile da risolvere usando tecniche di codifica asincrone convenzionali?


Continuo a cercare - dovrò vedere molti esempi prima di avere una buona idea di cosa sia meglio usare.
Sam Harwell,

4
Ho realizzato una piccola demo della ricerca live di Bing in WPF con Rx: blog.andrei.rinea.ro/2013/06/01/…
Andrei Rînea

Risposte:


97

AGGIORNAMENTO : I post di blog di seguito sono stati sostituiti dal mio libro online www.IntroToRx.com . È un libro completo di 19 capitoli disponibile gratuitamente. Puoi sfogliarlo sul Web o scaricare la versione mobi per il tuo kindle. Puoi anche ottenerlo direttamente da Amazon a un costo minimo (~ 99c / 77p). Se il libro non soddisfa le tue esigenze o aspettative, fammi sapere (l'autore) e faremo meglio per la v2.

Grazie per il link al post caldo / freddo. Questa è solo una parte della serie completa ,

  1. Introduzione a Rx
  2. Metodi statici e di estensione
  3. Gestione della vita - Completamento e annullamento dell'iscrizione
  4. Controllo del flusso
  5. Combinazione di più flussi IO-servibili
  6. Pianificazione e threading
  7. Osservabili caldi e freddi
  8. Test Rx
  9. Buffer, Window, Join e Group Join

Continuerò ad aggiornare questo blog con più materiale introduttivo di Rx.

Per cose più avanzate, vuoi andare al forum Rx (MSDN).


7
Ho trascinato i piedi imparando a conoscere Rx perché tutto il materiale didattico è sotto forma di video. +1 per fornire questa risorsa testuale.
Daniel Schilling

Enumera questo link è morto.
Maslow,

2
Lunga vita Enumera questo link
Full Time Skeleton

1
Lavoro con James (EnumerateThis) e non lo tocca da anni. Non sembra avere il tempo o l'appetito per rianimarlo
Lee Campbell,

85

Ecco un sito wiki con molti esempi di codice che dimostrano come utilizzare diverse funzionalità del framework .NET Rx: http://rxwiki.wikidot.com/101samples

Ho scoperto che questo è il sito più completo là fuori e quello che è il più veloce per iniziare.


12
Per quanto ne so, questa wiki non dice tanto quale riferimento includere. Il che è piuttosto ... frustrante.
George Mauer,

umm basta aggiungere le DLL e aprire Esplora oggetti e cercare la classe. ovviamente aiuta anche il menu contestuale del clic destro in Visual Studio
Joe

62

Sito MSDN per Rx-Framework

Per uno sviluppatore che va più in profondità, il codice sorgente

Fantastico keynote austriaco su Rx

Questo è il migliore che abbia mai visto: DevCamp 2010 Keynote - Rx: Curare il tuo blues di programmazione asincrona

Alcuni video interessanti su Channel 9

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

Un'intervista con il creatore di Rx: Expert to Expert: Brian Beckman ed Erik Meijer - Inside the .NET Reactive Framework (Rx)

Un'introduzione del creatore di Rx

Un articolo codeproject

Un altro blog primo corso con link (nuovo)


5
+1 Consiglio vivamente questi video, ho imparato MOLTO, dai un'occhiata anche ad alcuni dei video di Bart De Smet su IQueryable e IQbservable, Comprendi meglio gli interni di Rx.
Gideon,

1
Il progetto di esempio completo per il video "DevCamp 2010 keynote" è qui: bartdesmet.net/download/Rx40Samples.zip
Omer Raviv

16

Ecco un esempio di qualcosa che è facile da fare con la programmazione reattiva, ma disordinato (se non impegnativo) con eventi classici, disegna linee mentre il pulsante del mouse è abbassato. È leggibile, non esiste una gestione esplicita dello stato:

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)); 

(Devo confessare che in questo esempio, Pairwise () è cresciuto in casa ...)

La cosa più importante di IObservable è che è "compostabile", proprio come IEnumerable.

Consiglio vivamente il video menzionato in un'altra risposta. In effetti su Channel9 ci sono diversi video sull'argomento:


Da dove viene. Fino a quando non posso mai usarlo, devo mancare un riferimento
TimothyP

1
@ TimothyP, penso che potrebbe essere un ritorno a una versione precedente. Quello o io ne ho scritto uno io stesso (all'epoca stavo giocando con l'implementazione di metodi di estensione IOervervable). Da quello che posso vedere, l'ultima versione delle estensioni reattive ha un metodo chiamato TakeUntil, che sembra una buona scelta.
Benjol,

Questo è un fantastico esempio che mostra lo spirito di Rx. Grazie.
Dan Abramov,

Puoi condividere l'implementazione di Pairwise ()?
blaster,

1
@blaster, come su questa implementazione: var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor,




4

Stranamente, la homepage di Reactive Extensions si collega a una dozzina di video e blog ma si dimentica di collegarsi alla documentazione di riferimento ufficiale completa. È un vero peccato, se conosci la squadra, per favore chiedi loro di sistemare il loro sito web!


3

Gioca con Rx Sandbox per avere una visione molto intuitiva del significato dei diversi combinatori. Questo è il miglior strumento di apprendimento che abbia mai visto.



2

Per rispondere alla seconda domanda, ecco un problema che può trarre molto beneficio da Rx. Si chiama "Diventa ricco in fretta".

Hai sviluppato un gioco con lo stesso nome e sta vendendo abbastanza bene. Ma è disponibile solo nei tuoi negozi per la vendita all'ingrosso. Per facilitare l'elaborazione del denaro contante, hai un nastro trasportatore che scorre verso di te.

(Non esitate a cambiare la storia sopra :))

Gli addetti alle vendite posizionano su di esso mazzette di denaro senza etichette che indicano l'ammontare e il tipo di fatture nel batuffolo. Il tuo compito è quello di ordinare e contare i soldi. Più tardi, quando ottieni più denaro, puoi assumere altri per aiutarti.

In questo caso, la fonte è una fonte asincrona di batuffoli di denaro (produttore). I vostri dipendenti e fornitori si aspettano soldi, ma dovete consumare le mazzette, spacchettarle e usare la vostra logica aziendale personalizzata per riconfezionare come appropriato per pagarle.

Gli addetti alle vendite corrono sul proprio thread, in modo che non debbano aspettare che tu conti ciò che gettano sulla cintura. Il tuo tempo viene sfruttato al meglio se ti viene detto quando è disponibile più denaro per contare, fino ad allora puoi svolgere altri lavori.

Puoi rappresentare ogni mazzetta con un byte [].

Questa è una situazione del mondo reale abbastanza comune; quando recuperi qualsiasi risorsa [ad esempio pagine Web per motori di ricerca, immagini o video] su una rete o dati da periferiche, li ottieni in blocchi di byte (possibilmente con intestazioni). In un singolo thread o in un ambiente multi-thread con cui è troppo difficile lavorare, si tende ad aggregarli ed elaborarli. Non più!!


questo è solo alcuni produttori (addetti alle vendite) che chiamano OnNext sullo stesso IObserver <T> e quindi il consumatore si abbona ma si assicura che sta osservando su un thread diverso da dove viene prodotto (OnNext).
Lee Campbell,



1

Oltre ai link di Andreas Hoffmann (li ho trovati molto utili quando stavo imparando Rx)

Ecco alcuni dei video di Bart De Smet (un ragazzo MOLTO intelligente che spiega le cose davvero bene):

Un bel po 'di Rx:
Rx - Curare i vostri Blues di programmazione asincrona

Alcuni interni gory + qualche filosofia, questi video sono davvero illuminanti:
Min LINQ - L'essenza di LINQ
(Il video sopra parla di come LINQ in qualche modo si collega ad altre cose, come Rx)

Osservazioni su IQbservable - The Dual of IQueryable



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.