@Override
		public String toString() {
			return key + "=" + super.toString();
		}
A map of cached values computed upon the first request, asynchronously

<p>
Each key present in the cache behaves similarly to {@link AsyncLazyValue}. The cache starts
empty. Whenever a key is requested, a computation for that key is started, but a future is
immediately returned. If the computation succeeds, the completed future is cached indefinitely,
and the result is recorded. Any subsequent requests for the same key return the same future, even
if the computation for that key has not yet completed. Thus, when it completes, all requests for
that key will be fulfilled by the result of the first request. If the computation completes
exceptionally, the key is optionally removed from the cache. Thus, a subsequent request for a
failed key may retry the computation.

<p>
Values can also be provided "out of band." That is, they may be provided by an alternative
computation. This is accomplished using {@link #get(Object, Function)}, {@link #put(Object)} or
{@link #put(Object, Object)}. The last immediately provides a value and completes any outstanding
requests, even if there was an active computation for the key. The first claims the key and
promises to provide the value at a later time.

<p>
At any point, an unmodifiable view of the completed, cached values may be obtained.

@param <K> the type of keys
@param <V> the type of values
Ghidra/Framework/Generic/src/main/java/ghidra/async/AsyncLazyMap.java