src/vs/workbench/contrib/audioCues/browser/observable.ts/LazyDerivedObserver/get
class LazyDerivedObserver:	public get(): T {
		if (this.observers.size === 0) {
			// Cache is not valid and don't refresh the cache.
			// Observables should not be read in non-reactive contexts.
			return this.computeFn(this);
		}

		if (this.updateCount > 0 && this.hasValue) {
			// Refresh dependencies
			for (const d of this._dependencies) {
				// Maybe `.get()` triggers `handleChange`?
				d.get();
				if (!this.hasValue) {
					// The other dependencies will refresh on demand
					break;
				}
			}
		}

		if (!this.hasValue) {
			const emptySet = this.staleDependencies;
			this.staleDependencies = this._dependencies;
			this._dependencies = emptySet;

			const oldValue = this.value;
			try {
				this.value = this.computeFn(this);
			} finally {
				// We don't want our observed observables to think that they are (not even temporarily) not being observed.
				// Thus, we only unsubscribe from observables that are definitely not read anymore.
				for (const o of this.staleDependencies) {
					o.unsubscribe(this);
				}
				this.staleDependencies.clear();
			}

			this.hasValue = true;
			if (this.hadValue && oldValue !== this.value) {
				for (const r of this.observers) {
					r.handleChange(this.actualObservable, undefined);
				}
			}
		}
		return this.value!;
	}