В ежедневной разработке мы можем использовать очереди — это структура хранения, позволяющая выполнять принцип «первым пришёл — первым ушёл».
Сценарии применения: ведение логов, отправка писем и т.д
Если нам нужно записывать журнал интерфейса каждого пользователя, запрашивающего наши данные, нам не нужно писать журнал каждый раз, когда пользователь их запросит, мы можем поместить содержимое журнала в очередь и позволить другим потокам выполнять его, чтобы не влиять на эффективность приложения.
Ещё одним преимуществом является то, что добавление данных в очередь в случае параллелизма с использованием одного потока для выполнения данных очереди позволяет избежать множества исключений, если при многопоточном доступе к одному и тому же физическому файлу возникнут исключения. (в зависимости от доступности)
Универсальный подход очереди:
Это абстрактный класс, и вам нужно унаследовать этот класс абстракции и реализовать метод абстракции Execute. Поскольку я не знаю, какой тип данных вы хотите обрабатывать, здесь используются обобщённые данные: Entity — это строковый тип, параметры метода — строкового типа, а данные, которые вы обрабатываете, — это строковые данные.
Потокобезопасная очередь ConcurrentQueue гарантирует, что в многопоточной среде не будет исключений.
ManualResetEvent для управления сигналом потока,Раньше мы проверяли очередь на данные каждые несколько секунд или минутТеперь мы добавляем данные в очередь и нам нужно только передать сигнал!
Применение:
(Конец)
|