Up until now, all the channels that we used had a capacity of exactly one element.
This means that if you write to this channel but no one reads from it, the sender will be suspended:
val channel = Channel<Int>()
val j = launch {
for (i in 1..10) {
channel.send(i)
println("Sent $i") }
}
j.join()
This code doesn't print anything because the coroutine is waiting for someone to read from the channel.
To avoid that, we can create a buffered channel:
val channel = Channel<Int>(5)
Now suspension will occur only when the channel capacity is reached.
It prints:
Sent 1
Sent 2
Sent 3
Sent 4
Sent 5
Since produce() and actor() are also backed up by a channel, we can make it buffered too:
val actor = actor<Int>(capacity = 5) {
...
}
val producer = produce<Int>(capacity = 10) {
...
}