Buffered channels

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) {
...
}
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.191.254.44