CodeBlanks Logo Icon CodeBlanks

ChannelWriter

C# kursu · Uzman · Ders 32/47

ChannelWriter<T> ile kanala yazmayı öğrenirsin.

ChannelWriter<T>

ChannelWriter<T>, kanalın üretici yüzüdür. WriteAsync(item) öğeyi zaman uyumsuz yazar; kanal doluysa yer açılana kadar bekler. TryWrite(item) ise anında dener; başarılıysa true, kanal dolu ya da tamamlanmışsa false döner.

Senkron bir akışta TryWrite engellemeden hızlıca denemek için uygundur. Zaman uyumsuz kodda await WriteAsync daha doğal akar.

TryWrite ve TryComplete

TryWrite, sınırsız kanalda her zaman true döner (tamamlanmadıysa). Bounded kanalda ise kapasite doluysa false döner; bu, backpressure'ı senkron olarak algımanın yoludur.

TryComplete(exception) ile kanalı bir hatayla da kapatabilirsin; bu, tüketiciye hatayı iletir. Writer.Complete() ise normal kapanıştır. Hata ile kapatma, üretimde bir sorun olduğunda tüketiciyi bilgilendirmek için yararlıdır.

Uygulama TryWrite ile üç öğe yaz

channel sınırsız bir string kanalıdır. channel.Writer.TryWrite ile üç öğe yaz ("a", "b", "c") ve her çağrının döndürdüğü bool'u Console.WriteLine ile yazdır.

Örnek çözümü göster
Üç kez Console.WriteLine(channel.Writer.TryWrite("...")); çağır.
Örnek çözüm:
using System;
using System.Threading.Channels;

class Program
{
    static void Main()
    {
        var channel = Channel.CreateUnbounded<string>();
        Console.WriteLine(channel.Writer.TryWrite("a"));
        Console.WriteLine(channel.Writer.TryWrite("b"));
        Console.WriteLine(channel.Writer.TryWrite("c"));
    }
}

Kendini test et

  1. Yazma metotlarını eşleştir

    WriteAsync
    Zaman uyumsuz yaz (await)
    TryWrite
    Anında dene, bool döndür
    WaitToWriteAsync
    Yer açılana kadar bekle
  2. ChannelWriter ile zaman uyumsuz yazmak için hangi metot kullanılır?

    • Write
    • Send
    • WriteAsync
    • TryWrite
    Cevabı göster

    WriteAsync — Doğru. WriteAsync zaman uyumsuz yazar.

  3. TryWrite çağrısını tamamla

    channel.Writer.____;
    Cevabı göster
    channel.Writer.TryWrite("mesaj");

Uzman bölümündeki tüm dersler