Events that are delayed are useful, but also tricky to use because they cannot be invalidated if the context of the delay is no longer valid (for example, a game timer that lasts ten seconds, but the game is terminated after five seconds).
The event delay function(s) should return some sort of thin object that can invalidate the delayed event or fire it immediately, or return a reference to the unique delayed event ID so that a function can accept that ID as an argument so it can be invalidated.