Pergunta

O que é LINQ para eventos a.k.a RX Framework aka o Extensions Reactive em .NET 4.0 (mas também disponível como versões portados)?

Em outras palavras, o que é todo o material em System.Reactive.dll para?

Foi útil?

Solução

.NET Rx equipe (isto não é um nome oficial) descobriram que qualquer seqüência push (eventos, chamadas de retorno) pode ser visto como uma seqüência de tração (como normalmente fazemos ao acessar enumerables), bem como - ou eles são dupla na natureza . Em suma observador / padrão observável é o dual de padrão de enumeração.

Então, o que é legal sobre sobre essa dualidade?

Qualquer coisa que você faz com seqüências de puxar (leia estilo de codificação declarativa) é aplicável às sequências de pressão também. Aqui estão alguns aspectos. Você pode criar observáveis ??a partir de eventos existentes e, em seguida, usá-los como cidadãos de primeira classe em .NET - isto é, você pode criar um observável a partir de um evento, e expor o mesmo que uma propriedade.

Como IObservable é o dual matemática de IEnumerable, .NET Rx facilita LINQ sobre seqüências de pressão, como eventos, bem como LINQ sobre IEnumerables

Ela dá maior liberdade para compor novos eventos -. Você pode criar eventos específicos de eventos gerais

.NET Rx apresenta duas interfaces, IObservable e IObserver que "fornece uma alternativa ao uso de adaptadores de entrada e saída como o produtor e consumidor de fontes de eventos e pias", e isso será em breve o de-facto para escrever código assíncrono em um forma declarativa. Aqui está um exemplo rápido.

//Create an observable for MouseLeftButtonDown

var mouseLeftDown=Observable.FromEvent<MouseButtonEventArgs>  
        (mycontrol,"MouseLeftButtonDown");  

//Query the above observable just to select the points
var points = from ev in mouseEvents  
                 select ev.EventArgs.GetPosition(this);  

//Show points in the window's title, when ever user
//presses the left button of the mouse
points.Subscribe(p => this.Title = "Location ="  
                                        + p.X + "," + p.Y);

Você pode passar por estas mensagens bem como para obter a cabeça ea cauda em detalhe. Também dê uma olhada no código fonte relaciona bem.

Confira este conjunto de artigos

Outras dicas

Você pode ler mais sobre ele aqui: http://themechanicalbride.blogspot.com/2009/07 /introducing-rx-linq-to-events.html

A minha primeira exposição foi neste blog, como eu estou lendo seu livro sobre F #: http://tomasp.net/articles/reactive-ii-csevents.aspx

Basicamente o meu entendimento do que é que quando você escrever um manipulador de eventos para os movimentos do mouse, por exemplo, você pode querer capturar continuamente esses eventos, e talvez ser capaz de contar quantos movimentos ou cliques, mas, basicamente, você quer usar essa informação em mais maneiras do que apenas como um manipulador de eventos. Assim, apenas tratar os eventos como um fluxo contínuo.

Além disso, confira este vídeo Channel 9: Especialista de Especialista: Brian Beckman e Erik Meijer - Dentro do .NET Framework reativa (Rx)

A partir da descrição show:

O .NET Framework reativa (Rx) é a dupla matemática de LINQ para Objetos. É constituída por um par de interfaces de IObserver / IObservable que representam baseada em impulso, ou observável, coleções, além de uma biblioteca de métodos de extensão que implementam a LINQ consulta padrão Operadores e outra transformação de fluxo útil funções.

Eu acho que a essência do RX é mudando o ângulo com o qual olhamos para informações. Naturalmente, cada pedaço de informação é o resultado de algum processo, que tem lugar no contínuo espaço-tempo. abordagem tradicional trabalha com a projeção do processo para o "atual" avião tempo, perder os detalhes da dimensão do tempo como resultado.

RX trabalha com a projeção para alguma outra dimensão, capturando o componente tempo, bem, isso não é nenhuma maravilha LINQ para RX é um super do LINQ regular.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top