Escrevi uma classe simples de ajuda para logs antes, copiei de outro framework, e o teste não é fácil de usar, da seguinte forma:
Este artigo reimplementa uma classe simples de logging baseada no BlockingCollection.
BlockingCollection<T> é uma classe thread-safe collection que oferece a seguinte funcionalidade:
Implemente o modelo maker-user. Adicione e busque itens simultaneamente via multithreading. Capacidade máxima opcional. Quando a coleção está vazia ou cheia, ela é bloqueada por operações de inserção e remoção. Tentativas de inserção e remoção não bloqueiam nem ocorrem por um período de tempo especificado. Encapsulamento implementa qualquer tipo de coleção de IProducerConsumerCollection<T> Use a tag cancelar para executar a ação de cancelamento. São suportados dois tipos de enums que usam foreach (no Visual Basic, For Each): enums somente leitura. Uma enumeração que remove um item quando um item é enumerado.
A Microsoft apresenta:O login do hiperlink está visível.
BlockingCollection é uma fila de bloqueio segura para threads, usando esse recurso para implementar o modo produtor-consumidor dentro do processo, como encaminhamento de mensagens, registro, etc.
Chame o método Add para adicionar informações à fila, e quando a fila não tem mensagens, o IsCompleted sempre bloqueia o loop while, então não causará um loop morto. Quando uma nova mensagem sair, o IsCompleted in while será acionado e retornará o tipo bool, fazendo a execução continuar, ou seja, buscar dados da thread.
Anteriormente, bloqueamos a thread chamando o método WaitOne do ManualResetEvent, chamando os métodos Reset e Set para passar o sinal, da seguinte forma:
O teste grava 10.000 logs, o que leva menos de 10 milissegundos, como mostrado na figura abaixo:
O código é o seguinte:
Código fonte para download:
Turistas, se quiserem ver o conteúdo oculto deste post, por favor Resposta
|