private _resolveOrRejectDeferred(deferred: DeferredPromise<T>, value: ProducerConsumerValue<T>): void {
deferred.complete(value.value);
deferred.error(value.error);
}
consume(): Promise<T> {
const value = this._unconsumedValues.length > 0 ? this._unconsumedValues.shift()! : this._finalValue!;
if (value.ok) {