produce(value: ProducerConsumerValue<T>): void {
if (this._unsatisfiedConsumers.length > 0) {
const deferred = this._unsatisfiedConsumers.shift()!;
this._resolveOrRejectDeferred(deferred, value);
} else {
this._unconsumedValues.push(value);
}
produceFinal(value: ProducerConsumerValue<T>): void {