Boa introdução ao .NET Reactive Framework [fechado]

218

Além da documentação da Microsoft, há uma boa introdução e tutorial para a estrutura do Microsoft Reactive (Rx)?

Além disso, qual é um bom exemplo (com código) de que o Reactive facilita um problema de programação difícil de resolver usando técnicas convencionais de codificação assíncrona?

LBushkin
fonte
Eu continuo procurando - precisarei ver muitos exemplos antes de ter uma boa idéia do que é melhor usado.
21310 Sam Harwell
4
Eu construí uma pequena demonstração de pesquisa ao vivo Bing em WPF com Rx: blog.andrei.rinea.ro/2013/06/01/...
Andrei Rînea
5
I responder exatamente essa questão em uma série de posts no meu blog: rehansaeed.co.uk/reactive-extensions-part1-replacing-events
Muhammad Rehan Saeed

Respostas:

97

ATUALIZAÇÃO : As postagens abaixo foram substituídas pelo meu livro on-line www.IntroToRx.com . É um livro abrangente de 19 capítulos disponível gratuitamente. Você pode navegar na web ou baixar a versão mobi para o seu Kindle. Você também pode obtê-lo diretamente da Amazon por uma pequena taxa (~ 99c / 77p). Se o livro não atender às suas necessidades ou expectativas, informe-me (o Autor) e faremos um melhor para a v2.

Obrigado pelo link para a publicação Hot / Cold. Esta é apenas uma parte da série completa ,

  1. Introdução ao Rx
  2. Métodos estáticos e de extensão
  3. Gerenciamento da vida útil - Concluindo e cancelando a inscrição
  4. Controle de fluxo
  5. Combinando vários fluxos IObservable
  6. Programação e rosqueamento
  7. Observáveis ​​quentes e frios
  8. Testando Rx
  9. Buffer, janela, ingresso e ingresso no grupo

Continuarei atualizando este blog com mais informações introdutórias sobre o Rx.

Para coisas mais avançadas, você quer ir ao Rx Forum (MSDN).

Lee Campbell
fonte
7
Eu tenho me esforçado para aprender sobre Rx porque todos os materiais de aprendizagem estão na forma de vídeos. +1 por fornecer este recurso baseado em texto.
Daniel Schilling
Enumere este link está morto.
Maslow
2
Vida
1
Eu trabalho com James (EnumerateThis) e ele não o toca há anos. Ele não parece ter tempo ou apetite para revivê-lo
Lee Campbell
85

Aqui está um site wiki com muitos exemplos de código que demonstram como usar diferentes recursos da estrutura .NET Rx: http://rxwiki.wikidot.com/101samples

Achei que esse era o site mais abrangente do mercado e o mais rápido de começar.

LBushkin
fonte
12
Até onde eu sei, este wiki não diz exatamente qual referência incluir. O que é bastante ... frustrante.
George Mauer
umm basta adicionar as DLLs e abrir o explorador de objetos e procurar a classe. é claro que o menu de contexto do botão direito no Visual Studio ajuda muito
Joe
62

Site MSDN para Rx-Framework

Para um desenvolvedor que está se aprofundando, o código-fonte

Apresentação legal austríaca sobre Rx

Este é o melhor que eu já vi: Keynote do DevCamp 2010 - Rx: curando seus blues de programação assíncrona

Alguns vídeos interessantes no canal 9

Kim Hamilton e Wes Dyer: Por dentro do .NET Rx e IObservable / IObserver no BCL (VS 2010)

Uma entrevista com o criador do Rx: Especialista em Especialista: Brian Beckman e Erik Meijer - Por Dentro do .NET Reactive Framework (Rx)

Uma introdução do criador do Rx

Um artigo do Codeproject

Outro curso primeiro blog com links (novo)

Horário de verão
fonte
5
+1 Recomendo esses vídeos, eu aprendi MUITO, também confira alguns dos vídeos de Bart De Smet no IQueryable e IQbservable. Você entende melhor o interior do Rx.
Gideon
1
As amostras de projeto completo para o "DevCamp 2010 keynote" de vídeo está aqui: bartdesmet.net/download/Rx40Samples.zip
Omer Raviv
16

Aqui está um exemplo de algo que é fácil de fazer com a programação reativa, mas confuso (se não desafiador) com eventos clássicos, ele desenha linhas enquanto o botão do mouse está pressionado. É legível, não há manipulação explícita de 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)); 

(Devo confessar que nesse exemplo, Pairwise () é feito em casa ...)

A coisa mais importante sobre o IObservable é que ele é 'composível', assim como o IEnumerable.

Eu recomendo o vídeo mencionado em outra resposta. De fato, existem vários vídeos diferentes sobre o assunto no Channel9:

Benjol
fonte
Onde é que .até vem, eu nunca pode usá-lo, eu deve estar faltando uma referência
TimothyP
1
@ TimothyP, acho que pode ser um retrocesso para uma versão mais antiga. Isso ou eu escrevi um (eu estava jogando com a implementação de métodos de extensão IObservable na época). Pelo que pude ver, a versão mais recente das extensões reativas possui um método chamado TakeUntil, que parece ser um bom ajuste.
Benjol 21/09/10
Este é um exemplo impressionante que mostra o espírito de Rx. Obrigado.
Dan Abramov
Você pode compartilhar a implementação do Pairwise ()?
blaster
1
@blaster, como sobre esta implementação: var pairwise = source.Zip(source.Skip(1), (x, y) => new Tuple(x, y)).
MisterMetaphor
4

Você pode achar útil essa série de artigos (existem quatro) sobre o LINQ reativo: Programação reativa (II.) - Introdução ao LINQ reativo .

Ele tem um exemplo de como escrever um jogo usando-o, portanto, esperamos que seja o que você está procurando.

James Black
fonte
4

Estranhamente, a página inicial das Extensões reativas se vincula a uma dúzia de vídeos e blogs, mas esquece de se vincular à documentação abrangente de referência oficial. É uma pena, se você conhece a equipe, peça para que eles consertem o site!

Coronel Panic
fonte
3

Brinque com o Rx Sandbox para obter uma visão muito intuitiva do significado dos diferentes combinadores. Esta é a melhor ferramenta de aprendizado que eu já vi.

Omer Raviv
fonte
2

Para responder à segunda pergunta, aqui está um problema que pode se beneficiar muito com o Rx. Chama-se "Fique rico rapidamente".

Você desenvolveu um jogo com o mesmo nome e está vendendo muito bem. Mas está disponível apenas em suas lojas para atacado. Para facilitar o processamento de dinheiro, você tem uma correia transportadora que flui em sua direção.

(Por favor, sinta-se livre para mudar a história acima :))

O pessoal de vendas coloca maços de dinheiro vinculados, sem rótulos, indicando a quantidade e o tipo de notas no maço. Seu trabalho é classificar e contar o dinheiro. Mais tarde, quando você receber mais dinheiro, poderá contratar outras pessoas para ajudá-lo.

Nesse caso, a fonte é uma fonte assíncrona de maços de dinheiro (Produtor). Seus funcionários e fornecedores esperam dinheiro, mas você precisa consumir os maços, desempacotá-los e usar sua lógica comercial personalizada para reembalar conforme apropriado para pagá-los.

O pessoal de vendas está executando em seu próprio segmento, para que eles não precisem esperar que você conte o que jogam no cinto. Seu tempo é melhor utilizado se lhe for dito quando mais dinheiro está disponível para contar, até então você poderá fazer outro trabalho.

Você pode representar cada maço por um byte [].

Esta é uma situação do mundo real bastante comum; ao recuperar qualquer recurso [por exemplo, páginas da web para mecanismos de pesquisa, imagens ou vídeos] em uma rede ou dados de periféricos, você os obtém em pedaços de bytes (possivelmente com cabeçalhos). Em um único encadeamento ou em um ambiente com vários encadeamentos muito difícil de trabalhar, você tende a agregá-los e processá-los. Não mais!!

atuação
fonte
são apenas alguns produtores (vendedores) chamando OnNext no mesmo IObserver <T> e, em seguida, o consumidor está assinando, mas assegurando que está Observando em um encadeamento diferente do local onde está sendo produzido (OnNext).
21811 Lee Campbell
1

Além dos links de Andreas Hoffmann (achei muito útil quando eu estava aprendendo Rx)

Aqui estão alguns de Bart De Smet (um cara MUITO esperto que explica as coisas muito bem) Vídeos:

Como uma espécie de Rx:
Rx - curando seus blues de programação assíncrona

Alguns interiores sangrentos + alguma filosofia, esses vídeos são realmente esclarecedores:
Min LINQ - A essência do LINQ
(o vídeo acima trata de como o LINQ meio que se relaciona com outras coisas, como Rx)

Observações sobre IQbservable - O duplo de IQueryable

gideon
fonte