Bounded Channel
Bounded channel capacity makes senders wait when receivers fall behind.
function* queueBatches() {
const [receiver, sender] = yield* channel<string, never>(1);
yield* spawn(function* writeBatches() {
const first = yield* receive(receiver);
yield* sleep(1000);
const second = yield* receive(receiver);
const third = yield* receive(receiver);
const fourth = yield* receive(receiver);
return [first, second, third, fourth];
});
yield* send(sender, "draft");
yield* send(sender, "review");
yield* send(sender, "publish");
yield* sleep(1000);
yield* send(sender, "archive");
return 4;
}queueBatches creates a capacity-one channel and shares the receiver with writeBatches.
The draft send is accepted before the channel fills.
review and publish arrive while the buffer is full, so their sends wait.
writeBatches receives later values as the waiting sends are accepted.