Ich habe zuvor eine einfache Loging-Hilfeklasse geschrieben, die ich von einem anderen Framework kopiert habe, und der Test ist nicht einfach zu bedienen, wie folgt:
Dieser Artikel implementiert eine einfache Logging-Klasse auf Basis von BlockingCollection neu.
BlockingCollection<T> ist eine threadsichere Sammlungsklasse, die folgende Funktionalität bietet:
Implementiere das Maker-User-Modell. Fügen Sie Items gleichzeitig durch Multithreading hinzu und holen sie ab. Optionale maximale Kapazität. Wenn die Sammlung leer oder voll ist, wird sie durch Ein- und Entfernen-Operationen blockiert. Ein- und Entfernungsversuche blockieren oder finden nicht für einen bestimmten Zeitraum statt. Encapsulation implementiert jeden Collection-Typ von IProducerConsumerCollection<T> Verwenden Sie das Abbruch-Tag, um die Abbruchaktion auszuführen. Zwei Arten von Enums, die foreach verwenden (in Visual Basic, For Each), werden unterstützt: Nur-Lese-Enums. Eine Aufzählung, die einen Punkt entfernt, wenn ein Punkt aufgezählt wird.
Microsoft stellt vor:Der Hyperlink-Login ist sichtbar.
BlockingCollection ist eine threadsichere Blockwarteschlange, die diese Funktion nutzt, um den Producer-Consumer-Modus im Prozess zu implementieren, wie zum Beispiel Nachrichtenweiterleitung, Logging usw.
Ruft die Add-Methode auf, um Informationen zur Warteschlange hinzuzufügen, und wenn die Warteschlange keine Nachrichten enthält, blockiert IsCompleted immer die while-Schleife, sodass keine Deadloop entsteht. Wenn eine neue Nachricht erscheint, wird das IsCompleted-in-while ausgelöst und gibt den Bool-Typ zurück, wodurch die Ausführung fortgesetzt wird, also Daten aus dem Thread abgerufen werden.
Zuvor haben wir den Thread blockiert, indem wir die WaitOne-Methode von ManualResetEvent aufgerufen und die Reset- und Set-Methoden aufgerufen haben, um das Signal weiterzugeben, wie folgt:
Der Test schreibt 10.000 Logs, was weniger als 10 Millisekunden benötigt, wie in der untenstehenden Abbildung dargestellt:
Der Code lautet wie folgt:
Quellcode-Download:
Touristen, wenn ihr den versteckten Inhalt dieses Beitrags sehen wollt, bitte Antwort
|