Ответ
Channel — это потокобезопасный способ передачи данных между корутинами. По сути, это очередь, где отправитель (send) и получатель (receive) могут работать асинхронно.
Особенности:
- Горячий поток — данные начинают передаваться, даже если получатель не готов.
- Может быть закрыт (
close), чтобы сигнализировать о завершении передачи. - Поддерживает разные стратегии при переполнении (
BufferOverflow):SUSPEND,DROP_OLDEST,DROP_LATEST.
Пример:
val channel = Channel<Int>()
launch {
repeat(5) {
channel.send(it)
}
channel.close()
}
launch {
for (value in channel) {
println("Received: $value")
}
}
Здесь корутины обмениваются числами от 0 до 4. После отправки всех данных канал закрывается.