Partilhar via


Implementando seus próprios operadores para IObservable

Você pode estender o Rx adicionando novos operadores para operações que não são fornecidas pela biblioteca LINQ ou criando sua própria implementação de operadores de consulta padrão para melhorar a legibilidade e o desempenho. Escrever uma versão personalizada de um operador LINQ padrão é útil quando você deseja operar com objetos na memória e quando a personalização pretendida não requer uma exibição abrangente da consulta.

Como criar operadores

O LINQ oferece um conjunto completo de operadores que abrangem a maioria das operações possíveis em um conjunto de entidades. No entanto, talvez seja necessário um operador para adicionar um significado semântico específico à sua consulta, especialmente se você puder reutilizar esse mesmo operador várias vezes em seu código.

Muitos operadores LINQ existentes são de fato criados usando outros operadores LINQ básicos. Por exemplo, o operador SelectMany é criado compondo os operadores Select e Merge, como mostra o código a seguir.

public static IObservable<TResult> SelectMany<TSource, TResult>( this IObservable<TSource> source, Func<TSource, IObservable<TResult>> selector) 
{ 
   return source.Select(selector).Merge(); 
} 
In t

Ao reutilizar os operadores LINQ existentes ao criar um novo, você pode aproveitar os recursos existentes de desempenho ou tratamento de exceções implementados nas bibliotecas Rx.

Ao escrever um operador personalizado, é uma boa prática não deixar descartáveis não utilizados; caso contrário, você pode descobrir que os recursos podem realmente ser vazados e o cancelamento pode não funcionar corretamente.

Personalizando operadores existentes

Adicionar novos operadores ao LINQ é uma maneira de estender seus recursos. No entanto, você também pode melhorar a legibilidade do código encapsulando operadores existentes em operadores mais especializados e significativos.