Existe uma ferramenta de sincronização como "buffer de tarefa assíncrona do tamanho de um item"?

Muitas vezes, no desenvolvimento da interface do usuário, manipulo eventos de maneira que, quando um evento ocorre pela primeira vez - inicio imediatamente o processamento, mas se houver uma operação de processamento em andamento - aguardo a conclusão antes de processar outro evento. Se ocorrer mais de um evento antes da conclusão da operação - eu processo apenas o mais recente.

A maneira como normalmente faço com que meu método de processo tenha um loop e, no manipulador de eventos, verifico um campo que indica se estou processando algo e se estou - coloco meus argumentos de eventos atuais em outro campo que é basicamente um tamanho de item buffer e quando a passagem de processamento atual for concluída - verifico se há algum outro evento para processar e faço um loop até terminar.

Agora, isso parece um pouco repetitivo demais e, possivelmente, não é a maneira mais elegante de fazê-lo, embora pareça funcionar bem para mim. Eu tenho duas perguntas então:

O que eu preciso fazer tem um nome?Existe algum tipo de sincronização reutilizável por aí que poderia fazer isso por mim?

Estou pensando em adicionar algo ao conjunto de primitivas de coordenação assíncrona de Stephen Toub que euincluído no meu kit de ferramentas.

questionAnswers(3)

yourAnswerToTheQuestion