This abstraction will mainly be in charge of handling events from a channel and dispatching them to handlers in a thread safe manner. It boxes synchronizing mechanisms inside a struct.