They are inherently racey, and I think we should mirror the async API (i.e wait_for_event and friends) for this kind of event watching instead.
Impl notes
When creating the blocking variants of wait_for_event, we must use OS aware primitives for waiting.