get
Returns the value. The first call runs the initializer, in the coroutine context of that caller.
Cancellation. When the caller that runs the initializer is cancelled, the initializer stops and the value stays uninitialized. The next get runs it again. When a waiting caller is cancelled, only its own wait stops.
Throws
if the initializer, or a coroutine started in it, calls get on this instance. That call would wait for itself forever.