Kirjutasin varem lihtsa logimise abiklassi, kopeerisin selle teisest raamistikust, ja test pole lihtne kasutada, järgmiselt:
See artikkel taasrakendab lihtsa logimisklassi, mis põhineb BlockingCollectionil.
BlockingCollection<T> on lõimede jaoks turvaline kogumisklass, mis pakub järgmist funktsionaalsust:
Rakendage maker-user mudelit. Lisa ja too esemeid samaaegselt multithreadingu kaudu. Valikuline maksimaalne mahutavus. Kui kogu on tühi või täis, blokeeritakse see lisamise ja eemaldamise operatsioonidega. Lisamis- ja eemaldamiskatsed ei blokeeri ega toimu kindla aja jooksul. Kapseldamine rakendab mis tahes IProducerConsumerCollectioni <T>kollektsiooni tüüpi Kasuta tühistamismärgist tühistamistoimingu sooritamiseks. Toetatud on kahte tüüpi enumeid, mis kasutavad foreach (Visual Basicus, For Each), on toetatud: ainult lugemiseks mõeldud enumid. Loendamine, mis eemaldab eseme, kui üksus on loendatud.
Microsoft tutvustab:Hüperlingi sisselogimine on nähtav.
BlockingCollection on lõimekindel blokeerimisjärjekord, mis kasutab seda funktsiooni tootja-tarbija režiimi rakendamiseks protsessis, näiteks sõnumite edastamine, logimine jne.
Kutsu selle Add meetod, et lisada infot järjekorda, ja kui järjekorras pole sõnumeid, blokeerib IsCompleted alati while-tsükli, nii et see ei põhjusta surnud tsüklit. Kui ilmub uus sõnum, käivitub IsCompleted in while ja see tagastab bool-tüübi, mis põhjustab täitmise jätkumise, st andmete toomise lõimest.
Varem blokeerisime lõime, kutsudes ManualResetEventi WaitOne meetodit, kutsudes signaali edastamiseks Reset ja Set meetodeid järgmiselt:
Test kirjutab 10 000 logi, mis võtab vähem kui 10 millisekundit, nagu alloleval joonisel näidatud:
Kood on järgmine:
Lähtekoodi allalaadimine:
Turistid, kui soovite näha selle postituse peidetud sisu, palun Vastuse
|