constructor(public defaultDelay: number | typeof MicrotaskDelay) {
this.completionPromise = null;
this.doResolve = null;
this.doReject = null;
this.task = null;
}
trigger(task: ITask<T | Promise<T>>, delay = this.defaultDelay): Promise<T> {