ChannelWriter
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
-
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
-
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.
-
TryWrite çağrısını tamamla
channel.Writer.____;Cevabı göster
channel.Writer.TryWrite("mesaj");