Ik heb eerder een eenvoudige loging-helpcursus geschreven, gekopieerd van een ander framework, en de test is niet eenvoudig te gebruiken, als volgt:
Dit artikel implementeert opnieuw een eenvoudige loggingklasse gebaseerd op BlockingCollection.
BlockingCollection<T> is een thread-safe collection-klasse die de volgende functionaliteit biedt:
Implementeer het maker-user model. Voeg items toe en haal ze gelijktijdig op via multithreading. Optionele maximale capaciteit. Wanneer de collectie leeg of vol is, wordt deze geblokkeerd door insert- en verwijderingsoperaties. Pogingen om in te voegen en te verwijderen blokkeren of vinden niet plaats gedurende een bepaalde periode. Encapsulation implementeert elk verzamelingstype van IProducerConsumerCollection<T> Gebruik de annuleertag om de annuleringsactie uit te voeren. Er worden twee soorten enums ondersteund die foreach gebruiken (in Visual Basic, For Each): alleen-lezen enums. Een opsomming die een item verwijdert wanneer een item wordt opgesomd.
Microsoft introduceert:De hyperlink-login is zichtbaar.
BlockingCollection is een thread-veilige blokkeerwachtrij, die deze functie gebruikt om de producer-consumer-modus binnen het proces te implementeren, zoals berichtdoorstuur, logging, enzovoort.
Roep de Add-methode aan om informatie aan de wachtrij toe te voegen, en wanneer de wachtrij geen berichten bevat, blokkeert IsCompleted altijd de while-lus, zodat er geen dead loop ontstaat. Wanneer er een nieuw bericht binnenkomt, wordt de IsCompleted-in getriggerd en geeft het type bool terug, waardoor de uitvoering doorgaat, dat wil zeggen, data uit de thread wordt opgehaald.
Eerder blokkeerden we de thread door de WaitOne-methode van ManualResetEvent aan te roepen, waarbij de Reset en Set methoden werden aangeroepen om het signaal door te geven, als volgt:
De test schrijft 10.000 logs, wat minder dan 10 milliseconden duurt, zoals getoond in de onderstaande figuur:
De code is als volgt:
Broncode downloaden:
Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieft Antwoord
|