Раніше я писав простий курс з логування, скопіюваний з іншого фреймворку, і тест непростий у використанні, а отже:
Ця стаття повторно реалізує простий клас логування на базі BlockingCollection.
<T> BlockingCollection — це клас колекції, безпечний для потоків, який забезпечує таку функціональність:
Впровадьте модель maker-user. Додавайте та забирайте предмети одночасно через багатопотокову роботу. Опціональна максимальна місткість. Коли колекція порожня або заповнена, її блокують операціями вставки та видалення. Спроби вставки та видалення не блокуються і не відбуваються протягом визначеного часу. Інкапсуляція реалізує будь-який тип колекції IProducerConsumerCollection<T> Використовуйте тег скасування для виконання дії скасування. Підтримуються два типи enums, які використовують foreach (у Visual Basic, For Each): enums лише для читання. Перерахування, яке видаляє елемент під час його перерахування.
Microsoft представляє:Вхід за гіперпосиланням видно.
BlockingCollection — це черга блокування, безпечна для потоків, яка використовує цю функцію для реалізації режиму виробник-споживач у процесі, такого як пересилання повідомлень, ведення журналу тощо.
Викликайте його метод додавання, щоб додати інформацію до черги, і коли в черзі немає повідомлень, IsCompleted завжди блокуватиме цикл while, тож не спричинить мертвий цикл. Коли з'являється нове повідомлення, активується IsCompleted in while і повертає тип bool, що призводить до продовження виконання, тобто отримання даних із потоку.
Раніше ми блокували потік, викликаючи метод WaitOne ManualResetEvent, викликаючи методи Reset і Set для передачі сигналу, наступним чином:
Тест записує 10 000 журналів, що займає менше 10 мілісекунд, як показано на рисунку нижче:
Код виглядає так:
Завантаження вихідного коду:
Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласка Відповідь
|