CodeBlanks Logo Icon CodeBlanks

Channel

Channel ile coroutine'ler arası iletişim öğrenirsin.

Channel nedir?

Channel, coroutine'ler arasında veri taşımak için kullanılan eşzamanlı bir kuyruktur. Bir coroutine send ile değer bırakır, diğeri receive ile alır.

Bir Channel<T>() ile oluşturulur. send ve receive suspending fonksiyonlardır; kuyruk doluysa send bekler, boşsa receive bekler. Bu, üretici ve tüketicinin hızını dengeleyen doğal bir mekanizmadır. Bir channel kapatıldığında (.close()) tüketici son değeri alıp bittiğini anlar.

send ve receive

Üretici coroutine channel.send(value) ile değer bırakır. Tüketici coroutine channel.receive() ile bir değer alır. Her ikisi de suspending fonksiyondur; beklemek gerekirse otomatik olarak bekletirler.

Channel kapandığında receive artık değer bulamazsa ClosedReceiveChannelException fırlatır. Bunun yerine for (value in channel) döngüsü kullanırsan channel kapandığında döngü temiz biçimde biter. Bu yapı tıkanma riskini azaltır.

Uygulama Channel ile gönder ve al

val channel = Channel<Int>() tanımla. Bir launch içinde channel.send(10) ve channel.send(20) çağır, sonra channel.close() yap. Ana akışta for (value in channel) ile her değeri println("Aldı: $value") ile yazdır.

Başlangıç kodu

Main.kt
// Channel send ve receive
// buraya yaz
fun main() = runBlocking {
    
}

Örnek çözüm

Main.kt
fun main() = runBlocking {
    val channel = Channel<Int>()
    launch {
        channel.send(10)
        channel.send(20)
        channel.close()
    }
    for (value in channel) {
        println("Aldı: $value")
    }
}

Beklenen çıktı

Aldı: 10
Aldı: 20

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Channel ne sağlar?

  • Coroutine'ler arası veri Doğru cevap
  • Dispatcher seçimi
  • UI thread yönetimi
  • Memory cache

Açıklama: Channel, coroutine'ler arasında veri taşımak içindir.

2 Channel tür parametresini tamamla

Soru
val channel = Channel<____>()
Cevap
val channel = Channel<Int>()

Açıklama: Channel bir tür parametresi ister.

3 Channel parçalarını eşle

Kavram Anlamı
Channel<T> Kuyruk
send Değer bırakır
receive Değer alır
close Kapatır

İleri seviye bölümündeki tüm dersler