public synchronized CompletableFuture<T> waitChanged() {
		if (disposalReason != null) {
			return CompletableFuture.failedFuture(disposalReason);
		}
		if (changePromise == null) {
			changePromise = new CompletableFuture<>();
		}
		return changePromise;
	}
Wait for the next change and capture the new value

The returned future completes with the value of the very next change, at the time of that
change. Subsequent changes to the value of the reference do not affect the returned future.

@return the future value at the next change
Ghidra/Framework/Generic/src/main/java/ghidra/async/AsyncReference.java