Jag skrev en enkel loggningshjälpskurs tidigare, kopierad från ett annat ramverk, och testet är inte lätt att använda, enligt följande:
Den här artikeln implementerar en enkel loggningsklass baserad på BlockingCollection.
BlockingCollection<T> är en trådsäker samlingsklass som tillhandahåller följande funktionalitet:
Implementera maker-user-modellen. Lägg till och hämta föremål samtidigt genom multitrådning. Valfri maximal kapacitet. När samlingen är tom eller full blockeras den av insättnings- och borttagningsoperationer. Försök att infoga och ta bort blockeras inte eller sker under en angiven tidsperiod. Encapsulation implementerar vilken samlingstyp som helst av IProducerConsumerCollection<T> Använd avbryt-taggen för att utföra avbokningsåtgärden. Två typer av enums som använder foreach (i Visual Basic, For Each) stöds: skrivskyddade enum. En uppräkning som tar bort en post när en punkt är uppräknad.
Microsoft introducerar:Inloggningen med hyperlänken är synlig.
BlockingCollection är en trådsäker blockeringskö som använder denna funktion för att implementera producent-konsument-läget inom processen, såsom vidarebefordran av meddelanden, loggning med mera.
Anropa dess Add-metod för att lägga till information i kön, och när kön inte har några meddelanden kommer IsCompleted alltid att blockera while-loopen, så att den inte orsakar en dead loop. När ett nytt meddelande kommer ut triggas IsCompleted in while och returnerar bool-typen, vilket gör att exekveringen fortsätter, det vill säga hämtar data från tråden.
Tidigare blockerade vi tråden genom att anropa WaitOne-metoden ManualResetEvent, och anropade Reset och Set-metoderna för att skicka signalen, enligt följande:
Testet skriver 10 000 loggar, vilket tar mindre än 10 millisekunder, som visas i figuren nedan:
Koden är följande:
Källkodsnedladdning:
Turister, om ni vill se det dolda innehållet i detta inlägg, snälla Svar
|