get
Returns the value, running the initializer on the first call.
Concurrent first calls share one initialization: one caller runs the initializer while the others wait for its outcome.
Cancellation: cancelling the initializing caller stops the initializer and leaves the value uninitialized; the next caller runs the initializer again. Cancelling a waiting caller only stops its wait and rethrows.