bool dispatch(Event event) { if (listeners.isEmpty) return false; _publisher.publish(event); event.resolve(); return !event.isCanceled; }