Es iepriekš uzrakstīju vienkāršu reģistrēšanas palīdzības klasi, kas nokopēta no citas sistēmas, un tests nav viegli lietojams, šādi:
Šajā rakstā atkārtoti tiek ieviesta vienkārša reģistrēšanas klase, kuras pamatā ir BlockingCollection.
BlockingCollection<T> ir pavedienu droša vākšanas klase, kas nodrošina šādu funkcionalitāti:
Ieviesiet veidotāja-lietotāja modeli. Pievienojiet un iegūstiet vienumus vienlaicīgi, izmantojot vairāku pavedienu. Maksimālā ietilpība pēc izvēles. Ja kolekcija ir tukša vai pilna, tā tiek bloķēta, veicot ievietošanas un noņemšanas darbības. Ievietošanas un noņemšanas mēģinājumi netiek bloķēti un nenotiek noteiktu laika periodu. Iekapsulēšana īsteno jebkura veida IProducerConsumerCollection<T> Izmantojiet atcelšanas atzīmi, lai veiktu atcelšanas darbību. Tiek atbalstīti divu veidu uzskaitījumi, kas izmanto foreach (programmā Visual Basic, For Each): tikai lasāmi uzskaitījumi. Uzskaitījums, kas noņem vienumu, kad vienums ir uzskaitīts.
Microsoft ievieš:Hipersaites pieteikšanās ir redzama.
BlockingCollection ir pavedienu droša bloķēšanas rinda, izmantojot šo funkciju, lai procesā ieviestu ražotāja-patērētāja režīmu, piemēram, ziņojumu pārsūtīšanu, reģistrēšanu utt.
Izsauciet savu Add metodi, lai pievienotu informāciju rindai, un, ja rindā nav ziņojumu, IsCompleted vienmēr bloķēs while cilpu, tāpēc tas neradīs mirušu cilpu. Kad tiek parādīts jauns ziņojums, tiek aktivizēts IsCompleted in while un atgriežas bool tips, izraisot izpildes turpināšanos, tas ir, datu iegūšanu no pavediena.
Iepriekš mēs bloķējām pavedienu, izsaucot ManualResetEvent metodi WaitOne, izsaucot Reset un Set metodes, lai nodotu signālu, šādi:
Tests raksta 10,000 žurnālus, kas aizņem mazāk nekā 10 milisekundes, kā parādīts attēlā:
Kods ir šāds:
Avota koda lejupielāde:
Tūristi, ja vēlaties redzēt šīs ziņas slēpto saturu, lūdzu Atbildi
|