Setting:

let's say three events happen in three separate part of some application, the event should be handled by two controllers. The application dispatcher is responsible for sending/receiving events from all parts of the application, and this dispatcher should have an asynchronous event queue. 

In some cases, two the of three events are related along some attribute but are not of the same name, and only one should be passed to the controller, the other one may be discarded. 

Problem:

Currently, I have a 'queue' that really just bounces the event to the controller, this is unhelpful because I have no way of comparing two events in the queue if only one is ever there at time. 

So how do I ensure the events should stay in the queue for a while? I suppose a timeout function could do the trick but is there a better way?

To give credit where it's due, the idea of coalescing events is inspired by Cocoa and I'm basically trying to do something similar.