Returns a function that runs fn
the first time it's called and then never
again.
Returns a function that runs fn
the first time it's called and then never
again. If the returned function is invoked while another thread is running
fn
for the first (and only) time, the interloping thread blocks until
fn
has finished.
If fn
throws, it may be run more than once.