Pergunta

Eu assisti o vídeo e conheço os princípios gerais - o calor acontece mesmo quando ninguém está inscrito, o frio acontece "sob demanda".Além disso, Publish() converte frio em quente e Defer() converte quente em frio.

Mesmo assim, sinto que estou perdendo os detalhes.Aqui estão algumas perguntas que gostaria de ter respondidas:

  • Você pode dar uma definição abrangente para esses termos?
  • Faz sentido chamar Publish em um observável quente ou Defer em um frio?
  • Quais são os aspectos das conversões quentes/frias – você perde mensagens, por exemplo?
  • Existem diferenças entre definições quentes e frias para IObservable e IEnumerable?
  • Quais são os princípios gerais que você deve levar em consideração ao programar para frio ou calor?
  • Alguma outra dica sobre observáveis ​​quentes/frios?
Foi útil?

Solução

Eu espero que isso ajude.

Você pode dar uma definição abrangente para estes termos?

Veja minha postagem no blog em: http://leecampbell.blogspot.com/2010/08/rx-part-7-hot-and-cold-observables.html

Já faz sentido chamar publicar em um observar ou adiar em um resfriado?

Não, não que eu consiga pensar.

Quais são os aspectos das conversões quentes/frias - você perde mensagens, por exemplo?

É possível “perder” mensagens quando o Observável está Quente, pois os “eventos” acontecem independentemente dos assinantes.

Existem diferenças entre definições quentes e frias para IObservable e Ienumerable?

Eu realmente não entendo a pergunta.Espero que esta analogia ajude.Eu compararia um Hot Observable a um IEnumerable avaliado com ansiedade.ou seja, uma lista ou uma matriz são avaliadas com atenção e foram preenchidas mesmo que ninguém as enumere.Uma instrução de rendimento que obtém valores de um arquivo ou banco de dados pode ser avaliada preguiçosamente com a palavra-chave Yield.Embora preguiçoso possa ser bom, ele será, por padrão, reavaliado se um segundo recenseador o passar por cima.Comparando-os com Observáveis, um Observável Quente pode ser um Evento (clique no botão) ou um feed de temperaturas;esses eventos acontecerão independentemente de uma assinatura e também serão compartilhados se várias assinaturas forem feitas para o mesmo observale.Observable.Interval é um bom exemplo de observável Cold.Só começará a produzir valores quando for feita uma assinatura.Se forem feitas múltiplas assinaturas, a sequência será reavaliada e os "eventos" ocorrerão em momentos separados (dependendo do tempo entre as assinaturas).

Quais são os princípios gerais que você deve levar em consideração ao programar para frio ou calor?

Consulte o link no ponto um.Eu também recomendo que você analise o Publsh sendo usado em conjunto com o RefCount.Isso permite que você tenha a semântica de avaliação Lazy de Cold Observables, mas o compartilhamento de eventos que Hot Observables obtém.

Alguma outra dica sobre observáveis ​​quentes/frios?

Suje as mãos e brinque com elas.Depois de ler sobre eles por mais de 30 minutos, o tempo gasto codificando com eles será muito mais produtivo para você do que lendo mais :)

Outras dicas

Observáveis ​​quentes são aqueles que estão avançando mesmo quando você não está inscrito no observável.Como movimentos do mouse, tiques do temporizador ou qualquer coisa assim.Observáveis ​​frios são aqueles que começam a ser enviados apenas quando você se inscreve e recomeçam se você se inscreve novamente.

Sem a pretensão de dar uma resposta abrangente, gostaria de resumir da forma mais simples o que aprendi desde o momento desta pergunta.

Quente observável é uma correspondência exata para o evento.Em eventos, os valores geralmente são inseridos no manipulador mesmo que nenhum assinante esteja escutando.Todos os assinantes estão recebendo o mesmo conjunto de valores.Por seguirem o padrão de "evento", os observáveis ​​quentes são mais fácil de entender do que os frios.

Frio observável também é como um evento, mas com uma diferença - o evento Cold observável não é uma propriedade em uma instância compartilhada, é uma propriedade em um objeto que é produzido em uma fábrica sempre que alguém se inscreve.Além disso, a assinatura inicia a produção dos valores.Devido ao acima exposto, vários assinantes são isolados e cada um recebe seu próprio conjunto de valores.

O erro mais comum que os iniciantes em RX cometem é criar um observável frio (bem, pensar que estão criando um observável frio) usando algumas variáveis ​​de estado dentro de uma função (por exemplo,total acumulado) e não agrupá-lo em uma instrução .Defer().Como resultado, vários assinantes compartilham essas variáveis ​​e causam efeitos colaterais entre eles.

Observável

Conceitualmente, observável é simplesmente um wrapper em torno de alguns dados ou fontes de eventos, fornecendo alguma interface conveniente para tratar a fonte como um fluxo de dados que atualiza seus valores em tempo real.

Frio Observável

Na versão “fria”, a fonte não está ativa e pode ser comparada a blueprint, classes ou protótipos.Portanto, o observável não produz nada.Como um fluxo pendente ou suspenso.Isso o torna um valor puro que você pode passar com segurança para uma função pura.Um bom exemplo é um contador suspenso que sempre começa com 1 quando ativado.

“Inscrever-se” em um “observável frio” significa duas coisas:Criar (ou bifurcar) uma instância de fluxo de dados ativa e anexar o assinante.A primeira parte é semelhante à criação de objetos a partir de uma classe.A segunda parte é a assinatura propriamente dita e por si só não tem nada a ver com a primeira parte.

Quente observável

O "hot observável" já é uma instância em execução.Como um objeto criado a partir do protótipo e pronto para uso.E a assinatura envolve apenas a anexação do observador real.Nenhuma parte de ativação é necessária.

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