Существует ли такой инструмент синхронизации, как «буфер асинхронных задач размером с один элемент»?

Много раз в разработке пользовательского интерфейса я обрабатываю события таким образом, что, когда событие появляется впервые - я немедленно начинаю обработку, но если выполняется одна операция обработки - я жду, пока она завершится, прежде чем обработать другое событие. Если до завершения операции происходит более одного события - я обрабатываю только самое последнее.

Как обычно я делаю, чтобы у моего метода процесса был цикл, и в моем обработчике событий я проверяю поле, которое указывает, обрабатывает ли я что-то в данный момент, и, если я - я помещаю свои текущие аргументы события в другое поле, которое в основном имеет размер одного элемента. буфер и, когда текущий этап обработки завершается - я проверяю, есть ли какое-то другое событие для обработки, и зацикливаюсь, пока не закончу.

Теперь это кажется слишком повторяющимся и, возможно, не самым элегантным способом сделать это, хотя, похоже, в остальном у меня работает нормально. У меня есть два вопроса:

У того, что мне нужно сделать, есть имя?Есть ли какой-нибудь повторно используемый тип синхронизации, который мог бы сделать это для меня?

Я думаю добавить что-то к набору асинхронных координационных примитивов Стивена Туба, что явключены в мой инструментарий.

Ответы на вопрос(3)

Ваш ответ на вопрос