Jeg skrev en enkel logging-hjelpeklasse før, kopiert fra et annet rammeverk, og testen er ikke enkel å bruke, som følger:
Denne artikkelen implementerer en enkel loggingsklasse basert på BlockingCollection.
BlockingCollection<T> er en trådsikker samlingsklasse som tilbyr følgende funksjonalitet:
Implementer maker-bruker-modellen. Legg til og hent gjenstander samtidig gjennom multitråding. Valgfri maksimal kapasitet. Når samlingen er tom eller full, blokkeres den av insert- og fjerningsoperasjoner. Forsøk på innsetting og fjerning blokkeres ikke eller skjer i en spesifisert tidsperiode. Innkapsling implementerer enhver samlingstype av IProducerConsumerCollection<T> Bruk avbrytelsestaggen for å utføre kanselleringshandlingen. To typer enums som bruker foreach (i Visual Basic, For Each) støttes: skrivebeskyttede enums. En oppramsing som fjerner et element når et element er oppnummerert.
Microsoft introduserer:Innloggingen med hyperkoblingen er synlig.
BlockingCollection er en trådsikker blokkeringskø, som bruker denne funksjonen til å implementere produsent-forbruker-modus i prosessen, som for eksempel videresending av meldinger, logging osv.
Kaller Add-metoden for å legge til informasjon i køen, og når køen ikke har meldinger, vil IsCompleted alltid blokkere while-løkken, slik at den ikke forårsaker en død løkke. Når en ny melding kommer ut, vil IsCompleted in while bli trigget og returnere bool-typen, noe som får kjøringen til å fortsette, det vil si å hente data fra tråden.
Tidligere blokkerte vi tråden ved å kalle WaitOne-metoden ManualResetEvent, og kalle Reset og Set-metodene for å sende signalet, som følger:
Testen skriver 10 000 logger, noe som tar mindre enn 10 millisekunder, som vist i figuren nedenfor:
Koden er som følger:
Nedlasting av kildekode:
Turister, hvis dere vil se det skjulte innholdet i dette innlegget, vær så snill Svare
|