Ho scritto una semplice classe di aiuto per il logging prima, copiata da un altro framework, e il test non è facile da usare, come segue:
Questo articolo reimplementa una semplice classe di logging basata su BlockingCollection.
BlockingCollection<T> è una classe thread-safe collection che offre la seguente funzionalità:
Implementa il modello maker-utente. Aggiungi e recupera oggetti contemporaneamente tramite multithreading. Capacità massima opzionale. Quando la collezione è vuota o piena, viene bloccata dalle operazioni di inserimento e rimozione. I tentativi di inserimento e rimozione non bloccano o si verificano per un periodo di tempo specificato. L'incapsulamento implementa qualsiasi tipo di collezione di IProducerConsumerCollection<T> Usa il tag cancel per eseguire l'azione di cancellazione. Sono supportati due tipi di enum che usano foreach (in Visual Basic, For Each): enum di sola lettura. Un'enumerazione che rimuove un elemento quando un elemento viene elencato.
Microsoft presenta:Il login del link ipertestuale è visibile.
BlockingCollection è una coda di blocco thread-safe, che utilizza questa funzione per implementare la modalità produttore-consumatore all'interno del processo, come l'inoltro dei messaggi, il log, ecc.
Chiama il suo metodo Add per aggiungere informazioni alla coda, e quando la coda non ha messaggi, IsCompleted bloccherà sempre il ciclo while, quindi non causerà un dead loop. Quando esce un nuovo messaggio, viene attivato l'IsCompleted in while che restituisce il tipo bool, facendo continuare l'esecuzione, cioè il recupero dei dati dal thread.
In precedenza, bloccavamo il thread chiamando il metodo WaitOne di ManualResetEvent, chiamando i metodi Reset e Set per far passare il segnale, come segue:
Il test scrive 10.000 log, che richiede meno di 10 millisecondi, come mostrato nella figura sottostante:
Il codice è il seguente:
Scarica codice sorgente:
Turisti, se volete vedere il contenuto nascosto di questo post, vi prego Risposta
|