有界 channel
有界 channel 的容量会在接收方落后时让发送方等待。
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 创建容量为一的 channel,并把 receiver 交给 writeBatches。
draft 这次 send 会在 channel 填满前被接受。
review 和 publish 到达时缓冲已满,所以这两次 send 会等待。
writeBatches 后续接收值时,等待中的 send 会被接受。