Jeg skrev tidligere et simpelt logningshjælpekursus, kopieret fra et andet framework, og testen er ikke let at bruge, som følger:
Denne artikel genimplementerer en simpel logningsklasse baseret på BlockingCollection.
BlockingCollection<T> er en trådsikker samlingsklasse, der tilbyder følgende funktionalitet:
Implementér maker-bruger-modellen. Tilføj og hent genstande samtidig gennem multithreading. Valgfri maksimal kapacitet. Når samlingen er tom eller fuld, blokeres den af indsæt og fjern operationer. Indsæt og fjern forsøg blokeres ikke eller forekommer i en bestemt periode. Indkapsling implementerer enhver samlingstype af IProducerConsumerCollection<T> Brug annulleringstagget til at udføre annulleringshandlingen. To typer enums, der bruger foreach (i Visual Basic, For Each), understøttes: skrivebeskyttede enums. En opremsning, der fjerner et element, når et element bliver opregnet.
Microsoft introducerer:Hyperlink-login er synlig.
BlockingCollection er en trådsikker blokeringskø, der bruger denne funktion til at implementere producer-consumer-tilstand i processen, såsom meddelelsesvideresendelse, logning osv.
Kald dens Add-metode for at tilføje information til køen, og når køen ikke har beskeder, vil IsCompleted altid blokere while-løkken, så den ikke forårsager en død løkke. Når en ny besked kommer ud, vil IsCompleted-in while blive udløst og returnere bool-typen, hvilket får eksekveringen til at fortsætte, det vil sige at hente data fra tråden.
Tidligere blokerede vi tråden ved at kalde WaitOne-metoden ManualResetEvent, hvor vi kaldte Reset og Set-metoderne for at sende signalet, som følger:
Testen skriver 10.000 logs, hvilket tager mindre end 10 millisekunder, som vist i figuren nedenfor:
Koden er som følger:
Kildekode-download:
Turister, hvis I vil se det skjulte indhold i dette indlæg, så vær venlig Svar
|