Sometimes the task interested in a given event will change over time. A LocalWaker can
coordinate concurrent notifications with the consumer, potentially “updating” the underlying
task to wake up. This is useful in scenarios where a computation completes in another task and
wants to notify the consumer, but the consumer is in the process of being migrated to a new
logical task.
Consumers should call register before checking the result of a computation and producers
should call wake after producing the computation (this differs from the usual thread::park
pattern). It is also permitted for wake to be called beforeregister. This results in
a no-op.
A single LocalWaker may be reused for any number of calls to register or wake.