채널(Channel)

interface Channel<E> : SendChaanel<E>, ReceiveChannel<E>

interface SendChannel<in E> {
    suspend fun send(element: E)
    fun close(): Boolean
    // ...
}

interface ReceiveChannel<out E> {
    suspend fun receive(): E
    fun cancel(cause: CancellationException> = null)
    // ...
}
suspend fun main(): Unit = coroutineScope {
    val channel = produce {
        repeat(5) { index ->
            println("Producing next one")
            delay(1000)
            send(index * 2)
        }
    }
    
    for (element in channel) {
        println(element)
    }
}

채널 타입

val channel = produce(capacity = Channel.XXX)