Kirjoitin aiemmin yksinkertaisen lokitustukikurssin, kopioin sen toisesta kehyksestä, ja testi ei ole helppokäyttöinen, kuten seuraava:
Tämä artikkeli toteuttaa uudelleen yksinkertaisen lokiluokan BlockingCollectionin pohjalta.
BlockingCollection<T> on säiketurvallista kokoelmaluokkaa, joka tarjoaa seuraavat toiminnot:
Toteuta tekijä-käyttäjä-malli. Lisää ja hae esineitä samanaikaisesti monisäikeisyyden kautta. Valinnainen maksimikapasiteetti. Kun kokoelma on tyhjä tai täynnä, se estetään insert- ja poistotoiminnoilla. Lisäämis- ja poistoyritykset eivät estä tai tapahdu tietyn ajan. Kapselointi toteuttaa minkä tahansalaisen kokoelmatyypin IProducerConsumerCollection<T> Käytä peruutustunnistetta peruutustoiminnon suorittamiseen. Kaksi tyyppiä enumeja, jotka käyttävät foreach (Visual Basicissa, For Each), ovat tuettuja: vain lukua käyttävät enumit. Luettelointi, joka poistaa kohteen, kun jokin alkio on lueteltu.
Microsoft esittelee:Hyperlinkin kirjautuminen on näkyvissä.
BlockingCollection on säikeiden turvallinen estojono, joka käyttää tätä ominaisuutta tuottaja-kuluttaja-tilan toteuttamiseen prosessissa, kuten viestien välityksessä, lokituksessa jne.
Kutsu sen Lisää-metodia lisätäksesi tietoja jonoon, ja kun jonossa ei ole viestejä, IsCompleted estää aina while-silmukan, joten se ei aiheuta kuollutta silmukkaa. Kun uusi viesti ilmestyy, IsCompleted in while aktivoituu ja palauttaa bool-tyypin, jolloin suoritus jatkuu, eli datan hakeminen säikeestä.
Aiemmin estimme säikeen kutsumalla WaitOne-metodia ManualResetEventistä ja kutsumalla Reset- ja Set-metodit signaalin välittämiseksi, seuraavasti:
Testi kirjoittaa 10 000 lokkia, mikä vie alle 10 millisekuntia, kuten alla olevassa kuvassa näkyy:
Koodi on seuraava:
Lähdekoodin lataus:
Turistit, jos haluatte nähdä tämän postauksen piilotetun sisällön, olkaa hyvä Vastaus
|