Channel
- Kotlin kursu
- İleri seviye
- Ders 9/83
- 5 dk
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
// Channel send ve receive
// buraya yaz
fun main() = runBlocking {
}Örnek çözüm
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
val channel = Channel<____>()
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 |