Blocos de fluxo de dados Tpl postar vs sendasync reddit bitcoin markets

E-mail LinkedIn GitHub Stack Overflow RSS Hamid Mosalla Desenvolvimento Web e artigos .Net, Tutoriais, Discussões 18 de setembro de 2018 por Hamid Mosalla | .Net, programação assíncrona e paralela, C # em assíncrono, programação assíncrona e paralela, BufferBlock, padrão assíncrono baseado em tarefas, TPL Dataflow TPL Blocos de fluxo de dados: Post vs SendAsync

Eu estava lendo uma excelente série de artigos sobre o TPL Dataflow de Jack Vanlightly no outro dia. Ele chama minha atenção para a diferença entre Post e SendAsync quando queremos postar algo em um bloco. Eu não estava pensando muito sobre isso na época. Mas à medida que progredia em minhas leituras, percebi o que estava perdendo e percebi o quão importante é compreender essa distinção. Então eu pensei que não seria ruim se eu fizesse um post e compartilhasse com meus leitores.


A diferença entre post e SendAsync

moeda digital bitcoin

Alguns Blocos no TPL Dataflow tem a capacidade de armazenar em buffer as mensagens recebidas e enviadas. Eles fazem isso porque quando uma mensagem chega em um bloco, o bloco pode estar ocupado. Então o bloco coloca os itens na fila de mensagens que chamamos de buffer. Mas em algum momento esse buffer de entrada já está totalmente preenchido. Esse é apenas um dos motivos que podem acontecer, mas veremos como o Post e o SendAsync se comportam nessa situação. É importante observar que os blocos podem adiar a decisão sobre como lidar com a mensagem atual. É aí que a principal diferença entre essas duas mentiras. Postar

comprar bitcoin na malásia

Quando usamos Post, o controle retorna imediatamente se o bloco quiser adiar sua decisão sobre a mensagem. Em outras palavras, por exemplo, se a fila de mensagens recebidas estiver cheia, a postagem retornará como falsa. Isso significa que basicamente o post rejeita a corrente e precisamos estar cientes disso e colocar em algum mecanismo para reenviar o item, etc. Vamos deixar as coisas mais claras com um teste de unidade.

O método SendAsync é diferente porque, se um bloco decide adiar a aceitação de uma mensagem, ele não retorna falso imediatamente. Mas retorna uma tarefa de bool que representa a decisão do bloco no futuro. Em outras palavras, esperamos que o bloco tome uma decisão sobre se deseja ou não aceitar nossa mensagem. Vamos esclarecer isso por esses dois testes unitários.

chave pública de um bitcoin endereço

Em nosso primeiro teste, quando enviamos o segundo item para o nosso bloco usando o SendAsync, veremos se verificamos se o estado de nossa tarefa não está completo. Então SendAsync irá retornar uma tarefa para nós no buffer estava cheio e aguardar o bloco para aceitar o nosso item em oposição ao método Post que retorna falso imediatamente nessas situações. Por que a diferença é importante

Então, vimos como esses dois métodos são diferentes quando usamos o fluxo de dados blocos. Mas quando devemos usar esses dois métodos e quais são as implicações? A implicação é que, se usarmos o Post e não tivermos cuidado, poderemos perder alguns dados importantes que não podemos perder. Tenha em mente que isso também pode acontecer com o SendAsync por outros motivos. Então devemos ter um mecanismo para ambos. O que podemos fazer sobre isso?

IMO devemos usar o SendAsync na maioria das vezes, a menos que estejamos OK em perder um item no processo. Por exemplo, se perdêssemos uma entrada em algum tipo de aplicativo estatístico e tivéssemos uma ampla tolerância, talvez seja aceitável usar o método Post. Também vale a pena notar que, mesmo se decidirmos usar o SendAsync, o nosso bloco ainda poderá rejeitar o item. Mas isso não é algo que acontece devido ao limite em nosso buffer, mas é mais um caso especial.

divisão de bitcoin

Há muitas soluções para esse problema, mas a coisa mais simples que podemos fazer para Post e SendAsync é desqualificar um item para enviá-lo, se não for aceito, enfileiramos o item novamente. Outra solução pode ser a condição em um loop while, que garante que enviemos o item de novo e de novo para o bloco até que o trabalho no item seja concluído e, em seguida, passemos para o próximo item. Resumo