public AsyncReference<T, C> debounced(AsyncTimer timer, long windowMillis) {
		return new DebouncedAsyncReference<>(this, timer, windowMillis);
	}
Obtain a new {@link AsyncReference} whose value is updated after this reference has settled

<p>
The original {@link AsyncReference} continues to behave as usual, except that is has an
additional listener on it. When this reference is updated, the update is passed through an
{@link AsyncDebouncer} configured with the given timer and window. When the debouncer
settles, the debounced reference is updated.

<p>
Directly updating, i.e., calling {@link #set(Object, Object)} on, the debounced reference
subverts the debouncing mechanism, and will result in an exception. Only the original
reference should be updated directly.

<p>
Setting a filter on the debounced reference may have undefined behavior.

<p>
If the original reference changes value rapidly, settling on the debounced reference's
current value, no update event is produced by the debounced reference. If the original
reference changes value rapidly, settling on a value different from the debounced reference's
current value, an update event is produced, using the cause of the final update, even if an
earlier cause was associated with the same final value.

@param timer a timer for measuring the window
@param windowMillis the period of inactive time to consider this reference settled
@return the new {@link AsyncReference}
Ghidra/Framework/Generic/src/main/java/ghidra/async/AsyncReference.java