У щоденній розробці ми можемо використовувати черги — структуру зберігання, що дозволяє забезпечити принцип «перший прийшов — перший вийшов».
Сценарії застосування: ведення журналів, надсилання листів тощо
Якщо нам потрібно записувати журнал інтерфейсу кожного користувача, який запитує наші дані, нам не потрібно писати журнал щоразу, коли користувач це запитує, ми можемо помістити вміст журналу в чергу і дозволити іншим потокам виконувати його, щоб не впливати на ефективність застосунку.
Ще одна перевага полягає в тому, що додавання даних до черги у випадку конкурентності, використання одного потоку для виконання даних черги, дозволяє уникнути багатьох винятків, якщо конкордентність (багатопотоковий) доступ до одного й того ж фізичного файлу спричинить винятки. (за умови наявності)
Універсальний підхід черги:
Це абстрактний клас, і вам потрібно успадкувати цей клас абстракції та реалізувати метод абстракції Execute. Оскільки я не знаю, який тип даних ви хочете обробляти, тут використовуються узагальнення, тобто Entity — це рядковий тип, параметри методу — рядковий тип, а обробка даних — це рядкові дані.
Безпотрібна черга ConcurrentQueue гарантує, що не буде винятків у багатопотоковому середовищі.
ManualResetEvent для керування сигналом потоку,Раніше ми перевіряли чергу на наявність даних кожні кілька секунд або хвилинТепер ми додаємо дані до черги і залишаємося лише передати сигнал!
Використання:
(Кінець)
|