Predtým som napísal jednoduchú triedu pomoci s logovaním, skopírovanú z iného frameworku, a test nie je jednoduchý na používanie, a to nasledovne:
Tento článok znovu implementuje jednoduchú triedu logovania založenú na BlockingCollection.
BlockingCollection<T> je trieda kolekcií bezpečná pre vlákna, ktorá poskytuje nasledujúcu funkcionalitu:
Zaviesť model tvorca-užívateľ. Pridajte a načítavajte položky súčasne cez multithreading. Voliteľná maximálna kapacita. Keď je kolekcia prázdna alebo plná, je blokovaná operáciami vkladania a odstránenia. Pokusy o vloženie a odstránenie neblokujú ani neprebiehajú po stanovený čas. Zapuzdrenie implementuje akýkoľvek typ kolekcie IProducerConsumerCollection<T> Použite značku cancel na vykonanie akcie zrušenia. Podporované sú dva typy enumov, ktoré používajú foreach (vo Visual Basic, For Each): enumy len na čítanie. Enumerácia, ktorá odstráni položku pri jej vyčíslovaní.
Microsoft predstavuje:Prihlásenie na hypertextový odkaz je viditeľné.
BlockingCollection je blokovacia fronta bezpečná pre vlákna, využívajúca túto funkciu na implementáciu režimu producent-spotrebiteľ v rámci procesu, ako je preposielanie správ, logovanie a podobne.
Zavolajte jeho metódu Add na pridanie informácií do fronty a keď fronta nemá žiadne správy, IsCompleted vždy zablokuje while slučku, takže nespôsobí mŕtvu slučku. Keď vyjde nová správa, spustí sa IsCompleted in while a vráti bool typ, čo spôsobí pokračovanie vykonávania, teda načítanie dát z vlákna.
Predtým sme vlákno blokovali volaním metódy WaitOne ManualResetEvent, volaním metód Reset a Set na odoslanie signálu, nasledovne:
Test zapíše 10 000 logov, čo trvá menej ako 10 milisekúnd, ako je znázornené na obrázku nižšie:
Kód je nasledovný:
Stiahnutie zdrojového kódu:
Turisti, ak chcete vidieť skrytý obsah tohto príspevku, prosím. Odpoveď
|