constructor(_editor, _computer) {
        super();
        this._editor = _editor;
        this._computer = _computer;
        this._onResult = this._register(new Emitter());
        this.onResult = this._onResult.event;
        this._firstWaitScheduler = this._register(new RunOnceScheduler(() => this._triggerAsyncComputation(), 0));
        this._secondWaitScheduler = this._register(new RunOnceScheduler(() => this._triggerSyncComputation(), 0));
        this._loadingMessageScheduler = this._register(new RunOnceScheduler(() => this._triggerLoadingMessage(), 0));
        this._state = 0 /* HoverOperationState.Idle */;
        this._asyncIterable = null;
        this._asyncIterableDone = false;
        this._result = [];
    }
Computing the hover is very fine tuned.

Suppose the hover delay is 300ms (the default). Then, when resting the mouse at an anchor:
- at 150ms, the async computation is triggered (i.e. semantic hover)
  - if async results already come in, they are not rendered yet.
- at 300ms, the sync computation is triggered (i.e. decorations, markers)
  - if there are sync or async results, they are rendered.
- at 900ms, if the async computation hasn't finished, a "Loading..." result is added.